ETH Price: $3,268.93 (+0.69%)
Gas: 2 Gwei

Token

Half Biao (BIAO 0.5)
 

Overview

Max Total Supply

500,000,000 BIAO 0.5

Holders

53

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
999.899910010260160512 BIAO 0.5

Value
$0.00
0x6007b5111ccf41f4956fac66d6c5ddfd1ec75310
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:
HalfBiao

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-29
*/

/**
 *Submitted for verification at Etherscan.io on 2023-02-05
*/

// SPDX-License-Identifier: Unlicensed
// https://t.me/HalfBiao
// halfbiao.com
//https://twitter.com/halfbiaocoin
pragma solidity 0.8.12;

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

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


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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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


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

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

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

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

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

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

contract HalfBiao is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public BIAO = 0x00282FD551D03dC033256C4bf119532e8C735D8a;

    bool private swapping;

    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyDevFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellDevFee;
    uint256 public sellLiquidityFee;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;


    event ExcludeFromFees(address indexed account, bool isExcluded);

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20("Half Biao", "BIAO 0.5") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), BIAO);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);


        uint256 _buyDevFee = 25;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellDevFee = 40;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 500_000_000 * 1e18;

        maxTransactionAmount =  totalSupply * 2 / 100; // 2% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyDevFee = _buyDevFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;

        sellDevFee = _sellDevFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;

        devWallet = address(0x4AB6e61b3d55097e5eb42F7E653fFb3Ca03dBDAe); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _devFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;
    }

    function updateSellFees(
        uint256 _devFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function updateDevWallet(address newDevWallet)
        external
        onlyOwner
    {
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }


    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                //when buy
                if (
                    from == uniswapV2Pair &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            to == uniswapV2Pair &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        uint256 tokensForLiquidity = 0;
        uint256 tokensForDev = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev = (fees * sellDevFee) / sellTotalFees;
            }
            // on buy
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees; 
                tokensForDev = (fees * buyDevFee) / buyTotalFees;
            }

            if (fees> 0) {
                super._transfer(from, address(this), fees);
            }
            if (tokensForLiquidity > 0) {
                super._transfer(address(this), uniswapV2Pair, tokensForLiquidity);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForBIAO(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = BIAO;

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of BIAO
            path,
            devWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        swapTokensForBIAO(contractBalance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"BIAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405272282fd551d03dc033256c4bf119532e8c735d8a600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550348015620000b657600080fd5b506040518060400160405280600981526020017f48616c66204269616f00000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f4249414f20302e3500000000000000000000000000000000000000000000000081525081600390805190602001906200013b929190620009b0565b50806004908051906020019062000154929190620009b0565b505050620001776200016b6200051160201b60201c565b6200051960201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001a3816001620005df60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000223573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000249919062000aca565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620002a792919062000b0d565b6020604051808303816000875af1158015620002c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ed919062000aca565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033560a0516001620005df60201b60201c565b600060199050600080602890506000806b019d971e4fe8401e740000009050606460028262000365919062000b73565b62000371919062000c03565b600881905550606460028262000388919062000b73565b62000394919062000c03565b600a81905550612710600582620003ac919062000b73565b620003b8919062000c03565b60098190555084600d8190555083600e81905550600e54600d54620003de919062000c3b565b600c81905550826010819055508160118190555060115460105462000404919062000c3b565b600f81905550734ab6e61b3d55097e5eb42f7e653ffb3ca03dbdae600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200048162000473620006c960201b60201c565b6001620006f360201b60201c565b62000494306001620006f360201b60201c565b620004a961dead6001620006f360201b60201c565b620004cb620004bd620006c960201b60201c565b6001620005df60201b60201c565b620004de306001620005df60201b60201c565b620004f361dead6001620005df60201b60201c565b6200050533826200082d60201b60201c565b50505050505062000e5a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005ef6200051160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000615620006c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200066e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006659062000cf9565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007036200051160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000729620006c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000782576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007799062000cf9565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000821919062000d38565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008979062000da5565b60405180910390fd5b620008b460008383620009a660201b60201c565b8060026000828254620008c8919062000c3b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200091f919062000c3b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000986919062000dd8565b60405180910390a3620009a260008383620009ab60201b60201c565b5050565b505050565b505050565b828054620009be9062000e24565b90600052602060002090601f016020900481019282620009e2576000855562000a2e565b82601f10620009fd57805160ff191683800117855562000a2e565b8280016001018555821562000a2e579182015b8281111562000a2d57825182559160200191906001019062000a10565b5b50905062000a3d919062000a41565b5090565b5b8082111562000a5c57600081600090555060010162000a42565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a928262000a65565b9050919050565b62000aa48162000a85565b811462000ab057600080fd5b50565b60008151905062000ac48162000a99565b92915050565b60006020828403121562000ae35762000ae262000a60565b5b600062000af38482850162000ab3565b91505092915050565b62000b078162000a85565b82525050565b600060408201905062000b24600083018562000afc565b62000b33602083018462000afc565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b808262000b3a565b915062000b8d8362000b3a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bc95762000bc862000b44565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c108262000b3a565b915062000c1d8362000b3a565b92508262000c305762000c2f62000bd4565b5b828204905092915050565b600062000c488262000b3a565b915062000c558362000b3a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c8d5762000c8c62000b44565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ce160208362000c98565b915062000cee8262000ca9565b602082019050919050565b6000602082019050818103600083015262000d148162000cd2565b9050919050565b60008115159050919050565b62000d328162000d1b565b82525050565b600060208201905062000d4f600083018462000d27565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d8d601f8362000c98565b915062000d9a8262000d55565b602082019050919050565b6000602082019050818103600083015262000dc08162000d7e565b9050919050565b62000dd28162000b3a565b82525050565b600060208201905062000def600083018462000dc7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e3d57607f821691505b6020821081141562000e545762000e5362000df5565b5b50919050565b60805160a051613b6a62000eb160003960008181610ebb01528181611ee8015281816121310152818161233c0152818161240701526124f1015260008181610b3b01528181612a1f0152612a460152613b6a6000f3fe6080604052600436106102555760003560e01c80638a8c523c11610139578063c0246668116100b6578063dd62ed3e1161007a578063dd62ed3e146108b3578063e2f45605146108f0578063f11a24d31461091b578063f2fde38b14610946578063f63743421461096f578063f8b45b051461099a5761025c565b8063c0246668146107ce578063c18bc195146107f7578063c8c8ebe414610820578063d257b34f1461084b578063d85ba063146108885761025c565b80639c3b4fdc116100fd5780639c3b4fdc146106e5578063a0d82dc514610710578063a9059cbb1461073b578063ba6e4f1614610778578063bbc0c742146107a35761025c565b80638a8c523c146106245780638da5cb5b1461063b5780638ea5220f14610666578063924de9b71461069157806395d89b41146106ba5761025c565b8063313ce567116101d25780636a486a8e116101965780636a486a8e146105265780636ddd17131461055157806370a082311461057c578063715018a6146105b9578063751039fc146105d05780637571336a146105fb5761025c565b8063313ce5671461043f57806349bd5a5e1461046a5780634a62bb65146104955780634fbee193146104c057806366ca9b83146104fd5761025c565b806318160ddd1161021957806318160ddd1461035a5780631816467f14610385578063203e727e146103ae57806323b872dd146103d757806327c8f835146104145761025c565b806302dbd8f81461026157806306fdde031461028a578063095ea7b3146102b557806310d5de53146102f25780631694505e1461032f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190612b39565b6109c5565b005b34801561029657600080fd5b5061029f610a69565b6040516102ac9190612c12565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612c92565b610afb565b6040516102e99190612ced565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612d08565b610b19565b6040516103269190612ced565b60405180910390f35b34801561033b57600080fd5b50610344610b39565b6040516103519190612d94565b60405180910390f35b34801561036657600080fd5b5061036f610b5d565b60405161037c9190612dbe565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612d08565b610b67565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190612dd9565b610ca3565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190612e06565b610db2565b60405161040b9190612ced565b60405180910390f35b34801561042057600080fd5b50610429610eaa565b6040516104369190612e68565b60405180910390f35b34801561044b57600080fd5b50610454610eb0565b6040516104619190612e9f565b60405180910390f35b34801561047657600080fd5b5061047f610eb9565b60405161048c9190612e68565b60405180910390f35b3480156104a157600080fd5b506104aa610edd565b6040516104b79190612ced565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190612d08565b610ef0565b6040516104f49190612ced565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190612b39565b610f46565b005b34801561053257600080fd5b5061053b610fea565b6040516105489190612dbe565b60405180910390f35b34801561055d57600080fd5b50610566610ff0565b6040516105739190612ced565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190612d08565b611003565b6040516105b09190612dbe565b60405180910390f35b3480156105c557600080fd5b506105ce61104b565b005b3480156105dc57600080fd5b506105e56110d3565b6040516105f29190612ced565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190612ee6565b611173565b005b34801561063057600080fd5b5061063961124a565b005b34801561064757600080fd5b506106506112fe565b60405161065d9190612e68565b60405180910390f35b34801561067257600080fd5b5061067b611328565b6040516106889190612e68565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190612f26565b61134e565b005b3480156106c657600080fd5b506106cf6113e7565b6040516106dc9190612c12565b60405180910390f35b3480156106f157600080fd5b506106fa611479565b6040516107079190612dbe565b60405180910390f35b34801561071c57600080fd5b5061072561147f565b6040516107329190612dbe565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190612c92565b611485565b60405161076f9190612ced565b60405180910390f35b34801561078457600080fd5b5061078d6114a3565b60405161079a9190612e68565b60405180910390f35b3480156107af57600080fd5b506107b86114c9565b6040516107c59190612ced565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190612ee6565b6114dc565b005b34801561080357600080fd5b5061081e60048036038101906108199190612dd9565b611601565b005b34801561082c57600080fd5b50610835611710565b6040516108429190612dbe565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d9190612dd9565b611716565b60405161087f9190612ced565b60405180910390f35b34801561089457600080fd5b5061089d61186b565b6040516108aa9190612dbe565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190612f53565b611871565b6040516108e79190612dbe565b60405180910390f35b3480156108fc57600080fd5b506109056118f8565b6040516109129190612dbe565b60405180910390f35b34801561092757600080fd5b506109306118fe565b60405161093d9190612dbe565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190612d08565b611904565b005b34801561097b57600080fd5b506109846119fc565b6040516109919190612dbe565b60405180910390f35b3480156109a657600080fd5b506109af611a02565b6040516109bc9190612dbe565b60405180910390f35b6109cd611a08565b73ffffffffffffffffffffffffffffffffffffffff166109eb6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3890612fdf565b60405180910390fd5b8160108190555080601181905550601154601054610a5f919061302e565b600f819055505050565b606060038054610a78906130b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa4906130b3565b8015610af15780601f10610ac657610100808354040283529160200191610af1565b820191906000526020600020905b815481529060010190602001808311610ad457829003601f168201915b5050505050905090565b6000610b0f610b08611a08565b8484611a10565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610b6f611a08565b73ffffffffffffffffffffffffffffffffffffffff16610b8d6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90612fdf565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cab611a08565b73ffffffffffffffffffffffffffffffffffffffff16610cc96112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1690612fdf565b60405180910390fd5b670de0b6b3a76400006103e86001610d35610b5d565b610d3f91906130e5565b610d49919061316e565b610d53919061316e565b811015610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90613211565b60405180910390fd5b670de0b6b3a764000081610da991906130e5565b60088190555050565b6000610dbf848484611bdb565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e0a611a08565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e81906132a3565b60405180910390fd5b610e9e85610e96611a08565b858403611a10565b60019150509392505050565b61dead81565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f4e611a08565b73ffffffffffffffffffffffffffffffffffffffff16610f6c6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb990612fdf565b60405180910390fd5b81600d8190555080600e81905550600e54600d54610fe0919061302e565b600c819055505050565b600f5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611053611a08565b73ffffffffffffffffffffffffffffffffffffffff166110716112fe565b73ffffffffffffffffffffffffffffffffffffffff16146110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90612fdf565b60405180910390fd5b6110d1600061253d565b565b60006110dd611a08565b73ffffffffffffffffffffffffffffffffffffffff166110fb6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890612fdf565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61117b611a08565b73ffffffffffffffffffffffffffffffffffffffff166111996112fe565b73ffffffffffffffffffffffffffffffffffffffff16146111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e690612fdf565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611252611a08565b73ffffffffffffffffffffffffffffffffffffffff166112706112fe565b73ffffffffffffffffffffffffffffffffffffffff16146112c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bd90612fdf565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611356611a08565b73ffffffffffffffffffffffffffffffffffffffff166113746112fe565b73ffffffffffffffffffffffffffffffffffffffff16146113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c190612fdf565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546113f6906130b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611422906130b3565b801561146f5780601f106114445761010080835404028352916020019161146f565b820191906000526020600020905b81548152906001019060200180831161145257829003601f168201915b5050505050905090565b600d5481565b60105481565b6000611499611492611a08565b8484611bdb565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60019054906101000a900460ff1681565b6114e4611a08565b73ffffffffffffffffffffffffffffffffffffffff166115026112fe565b73ffffffffffffffffffffffffffffffffffffffff1614611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90612fdf565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115f59190612ced565b60405180910390a25050565b611609611a08565b73ffffffffffffffffffffffffffffffffffffffff166116276112fe565b73ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490612fdf565b60405180910390fd5b670de0b6b3a76400006103e86005611693610b5d565b61169d91906130e5565b6116a7919061316e565b6116b1919061316e565b8110156116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90613335565b60405180910390fd5b670de0b6b3a76400008161170791906130e5565b600a8190555050565b60085481565b6000611720611a08565b73ffffffffffffffffffffffffffffffffffffffff1661173e6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90612fdf565b60405180910390fd5b620186a060016117a2610b5d565b6117ac91906130e5565b6117b6919061316e565b8210156117f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ef906133c7565b60405180910390fd5b6103e86005611805610b5d565b61180f91906130e5565b611819919061316e565b82111561185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185290613459565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61190c611a08565b73ffffffffffffffffffffffffffffffffffffffff1661192a6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790612fdf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e7906134eb565b60405180910390fd5b6119f98161253d565b50565b60115481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a779061357d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae79061360f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bce9190612dbe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c42906136a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290613733565b60405180910390fd5b6000811415611cd557611cd083836000612603565b612538565b600b60009054906101000a900460ff16156120df57611cf26112fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d605750611d306112fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d995750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dd3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dec5750600660149054906101000a900460ff16155b156120de57600b60019054906101000a900460ff16611ee657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ea65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc9061379f565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f8b5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203257600854811115611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc90613831565b60405180910390fd5b600a54611fe183611003565b82611fec919061302e565b111561202d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120249061389d565b60405180910390fd5b6120dd565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120dc57600a5461208f83611003565b8261209a919061302e565b11156120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d29061389d565b60405180910390fd5b5b5b5b5b60006120ea30611003565b90506000600954821015905080801561210f5750600b60029054906101000a900460ff165b80156121285750600660149054906101000a900460ff16155b801561217f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121d55750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561222b5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561226f576001600660146101000a81548160ff021916908315150217905550612253612884565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123255750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561232f57600090505b60008060008315612526577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561239757506000600f54115b15612405576123c460646123b6600f548a6128d590919063ffffffff16565b6128eb90919063ffffffff16565b9250600f54601154846123d791906130e5565b6123e1919061316e565b9150600f54601054846123f491906130e5565b6123fe919061316e565b90506124cd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561246257506000600c54115b156124cc5761248f6064612481600c548a6128d590919063ffffffff16565b6128eb90919063ffffffff16565b9250600c54600e54846124a291906130e5565b6124ac919061316e565b9150600c54600d54846124bf91906130e5565b6124c9919061316e565b90505b5b60008311156124e2576124e1893085612603565b5b600082111561251757612516307f000000000000000000000000000000000000000000000000000000000000000084612603565b5b828761252391906138bd565b96505b612531898989612603565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266a906136a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126da90613733565b60405180910390fd5b6126ee838383612901565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b90613963565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612807919061302e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161286b9190612dbe565b60405180910390a361287e848484612906565b50505050565b600061288f30611003565b905060008114156128a057506128d3565b60146009546128af91906130e5565b8111156128c85760146009546128c591906130e5565b90505b6128d18161290b565b505b565b600081836128e391906130e5565b905092915050565b600081836128f9919061316e565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561292857612927613983565b5b6040519080825280602002602001820160405280156129565781602001602082028036833780820191505090505b509050308160008151811061296e5761296d6139b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106129df576129de6139b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a44307f000000000000000000000000000000000000000000000000000000000000000084611a10565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612ac8959493929190613ada565b600060405180830381600087803b158015612ae257600080fd5b505af1158015612af6573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612b1681612b03565b8114612b2157600080fd5b50565b600081359050612b3381612b0d565b92915050565b60008060408385031215612b5057612b4f612afe565b5b6000612b5e85828601612b24565b9250506020612b6f85828601612b24565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612bb3578082015181840152602081019050612b98565b83811115612bc2576000848401525b50505050565b6000601f19601f8301169050919050565b6000612be482612b79565b612bee8185612b84565b9350612bfe818560208601612b95565b612c0781612bc8565b840191505092915050565b60006020820190508181036000830152612c2c8184612bd9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c5f82612c34565b9050919050565b612c6f81612c54565b8114612c7a57600080fd5b50565b600081359050612c8c81612c66565b92915050565b60008060408385031215612ca957612ca8612afe565b5b6000612cb785828601612c7d565b9250506020612cc885828601612b24565b9150509250929050565b60008115159050919050565b612ce781612cd2565b82525050565b6000602082019050612d026000830184612cde565b92915050565b600060208284031215612d1e57612d1d612afe565b5b6000612d2c84828501612c7d565b91505092915050565b6000819050919050565b6000612d5a612d55612d5084612c34565b612d35565b612c34565b9050919050565b6000612d6c82612d3f565b9050919050565b6000612d7e82612d61565b9050919050565b612d8e81612d73565b82525050565b6000602082019050612da96000830184612d85565b92915050565b612db881612b03565b82525050565b6000602082019050612dd36000830184612daf565b92915050565b600060208284031215612def57612dee612afe565b5b6000612dfd84828501612b24565b91505092915050565b600080600060608486031215612e1f57612e1e612afe565b5b6000612e2d86828701612c7d565b9350506020612e3e86828701612c7d565b9250506040612e4f86828701612b24565b9150509250925092565b612e6281612c54565b82525050565b6000602082019050612e7d6000830184612e59565b92915050565b600060ff82169050919050565b612e9981612e83565b82525050565b6000602082019050612eb46000830184612e90565b92915050565b612ec381612cd2565b8114612ece57600080fd5b50565b600081359050612ee081612eba565b92915050565b60008060408385031215612efd57612efc612afe565b5b6000612f0b85828601612c7d565b9250506020612f1c85828601612ed1565b9150509250929050565b600060208284031215612f3c57612f3b612afe565b5b6000612f4a84828501612ed1565b91505092915050565b60008060408385031215612f6a57612f69612afe565b5b6000612f7885828601612c7d565b9250506020612f8985828601612c7d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fc9602083612b84565b9150612fd482612f93565b602082019050919050565b60006020820190508181036000830152612ff881612fbc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061303982612b03565b915061304483612b03565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561307957613078612fff565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130cb57607f821691505b602082108114156130df576130de613084565b5b50919050565b60006130f082612b03565b91506130fb83612b03565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561313457613133612fff565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061317982612b03565b915061318483612b03565b9250826131945761319361313f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006131fb602f83612b84565b91506132068261319f565b604082019050919050565b6000602082019050818103600083015261322a816131ee565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061328d602883612b84565b915061329882613231565b604082019050919050565b600060208201905081810360008301526132bc81613280565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061331f602483612b84565b915061332a826132c3565b604082019050919050565b6000602082019050818103600083015261334e81613312565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006133b1603583612b84565b91506133bc82613355565b604082019050919050565b600060208201905081810360008301526133e0816133a4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613443603483612b84565b915061344e826133e7565b604082019050919050565b6000602082019050818103600083015261347281613436565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134d5602683612b84565b91506134e082613479565b604082019050919050565b60006020820190508181036000830152613504816134c8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613567602483612b84565b91506135728261350b565b604082019050919050565b600060208201905081810360008301526135968161355a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135f9602283612b84565b91506136048261359d565b604082019050919050565b60006020820190508181036000830152613628816135ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061368b602583612b84565b91506136968261362f565b604082019050919050565b600060208201905081810360008301526136ba8161367e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061371d602383612b84565b9150613728826136c1565b604082019050919050565b6000602082019050818103600083015261374c81613710565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613789601683612b84565b915061379482613753565b602082019050919050565b600060208201905081810360008301526137b88161377c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061381b603583612b84565b9150613826826137bf565b604082019050919050565b6000602082019050818103600083015261384a8161380e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613887601383612b84565b915061389282613851565b602082019050919050565b600060208201905081810360008301526138b68161387a565b9050919050565b60006138c882612b03565b91506138d383612b03565b9250828210156138e6576138e5612fff565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061394d602683612b84565b9150613958826138f1565b604082019050919050565b6000602082019050818103600083015261397c81613940565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613a06613a016139fc846139e1565b612d35565b612b03565b9050919050565b613a16816139eb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a5181612c54565b82525050565b6000613a638383613a48565b60208301905092915050565b6000602082019050919050565b6000613a8782613a1c565b613a918185613a27565b9350613a9c83613a38565b8060005b83811015613acd578151613ab48882613a57565b9750613abf83613a6f565b925050600181019050613aa0565b5085935050505092915050565b600060a082019050613aef6000830188612daf565b613afc6020830187613a0d565b8181036040830152613b0e8186613a7c565b9050613b1d6060830185612e59565b613b2a6080830184612daf565b969550505050505056fea2646970667358221220a47774af9005c814376cf39929e5000b347b551cfc646f74f5261634022ee08064736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106102555760003560e01c80638a8c523c11610139578063c0246668116100b6578063dd62ed3e1161007a578063dd62ed3e146108b3578063e2f45605146108f0578063f11a24d31461091b578063f2fde38b14610946578063f63743421461096f578063f8b45b051461099a5761025c565b8063c0246668146107ce578063c18bc195146107f7578063c8c8ebe414610820578063d257b34f1461084b578063d85ba063146108885761025c565b80639c3b4fdc116100fd5780639c3b4fdc146106e5578063a0d82dc514610710578063a9059cbb1461073b578063ba6e4f1614610778578063bbc0c742146107a35761025c565b80638a8c523c146106245780638da5cb5b1461063b5780638ea5220f14610666578063924de9b71461069157806395d89b41146106ba5761025c565b8063313ce567116101d25780636a486a8e116101965780636a486a8e146105265780636ddd17131461055157806370a082311461057c578063715018a6146105b9578063751039fc146105d05780637571336a146105fb5761025c565b8063313ce5671461043f57806349bd5a5e1461046a5780634a62bb65146104955780634fbee193146104c057806366ca9b83146104fd5761025c565b806318160ddd1161021957806318160ddd1461035a5780631816467f14610385578063203e727e146103ae57806323b872dd146103d757806327c8f835146104145761025c565b806302dbd8f81461026157806306fdde031461028a578063095ea7b3146102b557806310d5de53146102f25780631694505e1461032f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190612b39565b6109c5565b005b34801561029657600080fd5b5061029f610a69565b6040516102ac9190612c12565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612c92565b610afb565b6040516102e99190612ced565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612d08565b610b19565b6040516103269190612ced565b60405180910390f35b34801561033b57600080fd5b50610344610b39565b6040516103519190612d94565b60405180910390f35b34801561036657600080fd5b5061036f610b5d565b60405161037c9190612dbe565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612d08565b610b67565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190612dd9565b610ca3565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190612e06565b610db2565b60405161040b9190612ced565b60405180910390f35b34801561042057600080fd5b50610429610eaa565b6040516104369190612e68565b60405180910390f35b34801561044b57600080fd5b50610454610eb0565b6040516104619190612e9f565b60405180910390f35b34801561047657600080fd5b5061047f610eb9565b60405161048c9190612e68565b60405180910390f35b3480156104a157600080fd5b506104aa610edd565b6040516104b79190612ced565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190612d08565b610ef0565b6040516104f49190612ced565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190612b39565b610f46565b005b34801561053257600080fd5b5061053b610fea565b6040516105489190612dbe565b60405180910390f35b34801561055d57600080fd5b50610566610ff0565b6040516105739190612ced565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190612d08565b611003565b6040516105b09190612dbe565b60405180910390f35b3480156105c557600080fd5b506105ce61104b565b005b3480156105dc57600080fd5b506105e56110d3565b6040516105f29190612ced565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190612ee6565b611173565b005b34801561063057600080fd5b5061063961124a565b005b34801561064757600080fd5b506106506112fe565b60405161065d9190612e68565b60405180910390f35b34801561067257600080fd5b5061067b611328565b6040516106889190612e68565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190612f26565b61134e565b005b3480156106c657600080fd5b506106cf6113e7565b6040516106dc9190612c12565b60405180910390f35b3480156106f157600080fd5b506106fa611479565b6040516107079190612dbe565b60405180910390f35b34801561071c57600080fd5b5061072561147f565b6040516107329190612dbe565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190612c92565b611485565b60405161076f9190612ced565b60405180910390f35b34801561078457600080fd5b5061078d6114a3565b60405161079a9190612e68565b60405180910390f35b3480156107af57600080fd5b506107b86114c9565b6040516107c59190612ced565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190612ee6565b6114dc565b005b34801561080357600080fd5b5061081e60048036038101906108199190612dd9565b611601565b005b34801561082c57600080fd5b50610835611710565b6040516108429190612dbe565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d9190612dd9565b611716565b60405161087f9190612ced565b60405180910390f35b34801561089457600080fd5b5061089d61186b565b6040516108aa9190612dbe565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190612f53565b611871565b6040516108e79190612dbe565b60405180910390f35b3480156108fc57600080fd5b506109056118f8565b6040516109129190612dbe565b60405180910390f35b34801561092757600080fd5b506109306118fe565b60405161093d9190612dbe565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190612d08565b611904565b005b34801561097b57600080fd5b506109846119fc565b6040516109919190612dbe565b60405180910390f35b3480156109a657600080fd5b506109af611a02565b6040516109bc9190612dbe565b60405180910390f35b6109cd611a08565b73ffffffffffffffffffffffffffffffffffffffff166109eb6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3890612fdf565b60405180910390fd5b8160108190555080601181905550601154601054610a5f919061302e565b600f819055505050565b606060038054610a78906130b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa4906130b3565b8015610af15780601f10610ac657610100808354040283529160200191610af1565b820191906000526020600020905b815481529060010190602001808311610ad457829003601f168201915b5050505050905090565b6000610b0f610b08611a08565b8484611a10565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610b6f611a08565b73ffffffffffffffffffffffffffffffffffffffff16610b8d6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90612fdf565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cab611a08565b73ffffffffffffffffffffffffffffffffffffffff16610cc96112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1690612fdf565b60405180910390fd5b670de0b6b3a76400006103e86001610d35610b5d565b610d3f91906130e5565b610d49919061316e565b610d53919061316e565b811015610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90613211565b60405180910390fd5b670de0b6b3a764000081610da991906130e5565b60088190555050565b6000610dbf848484611bdb565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e0a611a08565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e81906132a3565b60405180910390fd5b610e9e85610e96611a08565b858403611a10565b60019150509392505050565b61dead81565b60006012905090565b7f00000000000000000000000088f68175e3d396803ec3c1066ccd64ab8998810781565b600b60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f4e611a08565b73ffffffffffffffffffffffffffffffffffffffff16610f6c6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb990612fdf565b60405180910390fd5b81600d8190555080600e81905550600e54600d54610fe0919061302e565b600c819055505050565b600f5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611053611a08565b73ffffffffffffffffffffffffffffffffffffffff166110716112fe565b73ffffffffffffffffffffffffffffffffffffffff16146110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90612fdf565b60405180910390fd5b6110d1600061253d565b565b60006110dd611a08565b73ffffffffffffffffffffffffffffffffffffffff166110fb6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890612fdf565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61117b611a08565b73ffffffffffffffffffffffffffffffffffffffff166111996112fe565b73ffffffffffffffffffffffffffffffffffffffff16146111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e690612fdf565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611252611a08565b73ffffffffffffffffffffffffffffffffffffffff166112706112fe565b73ffffffffffffffffffffffffffffffffffffffff16146112c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bd90612fdf565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611356611a08565b73ffffffffffffffffffffffffffffffffffffffff166113746112fe565b73ffffffffffffffffffffffffffffffffffffffff16146113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c190612fdf565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546113f6906130b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611422906130b3565b801561146f5780601f106114445761010080835404028352916020019161146f565b820191906000526020600020905b81548152906001019060200180831161145257829003601f168201915b5050505050905090565b600d5481565b60105481565b6000611499611492611a08565b8484611bdb565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60019054906101000a900460ff1681565b6114e4611a08565b73ffffffffffffffffffffffffffffffffffffffff166115026112fe565b73ffffffffffffffffffffffffffffffffffffffff1614611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90612fdf565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115f59190612ced565b60405180910390a25050565b611609611a08565b73ffffffffffffffffffffffffffffffffffffffff166116276112fe565b73ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490612fdf565b60405180910390fd5b670de0b6b3a76400006103e86005611693610b5d565b61169d91906130e5565b6116a7919061316e565b6116b1919061316e565b8110156116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90613335565b60405180910390fd5b670de0b6b3a76400008161170791906130e5565b600a8190555050565b60085481565b6000611720611a08565b73ffffffffffffffffffffffffffffffffffffffff1661173e6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90612fdf565b60405180910390fd5b620186a060016117a2610b5d565b6117ac91906130e5565b6117b6919061316e565b8210156117f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ef906133c7565b60405180910390fd5b6103e86005611805610b5d565b61180f91906130e5565b611819919061316e565b82111561185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185290613459565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61190c611a08565b73ffffffffffffffffffffffffffffffffffffffff1661192a6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790612fdf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e7906134eb565b60405180910390fd5b6119f98161253d565b50565b60115481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a779061357d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae79061360f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bce9190612dbe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c42906136a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290613733565b60405180910390fd5b6000811415611cd557611cd083836000612603565b612538565b600b60009054906101000a900460ff16156120df57611cf26112fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d605750611d306112fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d995750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dd3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dec5750600660149054906101000a900460ff16155b156120de57600b60019054906101000a900460ff16611ee657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ea65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc9061379f565b60405180910390fd5b5b7f00000000000000000000000088f68175e3d396803ec3c1066ccd64ab8998810773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f8b5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203257600854811115611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc90613831565b60405180910390fd5b600a54611fe183611003565b82611fec919061302e565b111561202d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120249061389d565b60405180910390fd5b6120dd565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120dc57600a5461208f83611003565b8261209a919061302e565b11156120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d29061389d565b60405180910390fd5b5b5b5b5b60006120ea30611003565b90506000600954821015905080801561210f5750600b60029054906101000a900460ff165b80156121285750600660149054906101000a900460ff16155b801561217f57507f00000000000000000000000088f68175e3d396803ec3c1066ccd64ab8998810773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121d55750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561222b5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561226f576001600660146101000a81548160ff021916908315150217905550612253612884565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123255750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561232f57600090505b60008060008315612526577f00000000000000000000000088f68175e3d396803ec3c1066ccd64ab8998810773ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561239757506000600f54115b15612405576123c460646123b6600f548a6128d590919063ffffffff16565b6128eb90919063ffffffff16565b9250600f54601154846123d791906130e5565b6123e1919061316e565b9150600f54601054846123f491906130e5565b6123fe919061316e565b90506124cd565b7f00000000000000000000000088f68175e3d396803ec3c1066ccd64ab8998810773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561246257506000600c54115b156124cc5761248f6064612481600c548a6128d590919063ffffffff16565b6128eb90919063ffffffff16565b9250600c54600e54846124a291906130e5565b6124ac919061316e565b9150600c54600d54846124bf91906130e5565b6124c9919061316e565b90505b5b60008311156124e2576124e1893085612603565b5b600082111561251757612516307f00000000000000000000000088f68175e3d396803ec3c1066ccd64ab8998810784612603565b5b828761252391906138bd565b96505b612531898989612603565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266a906136a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126da90613733565b60405180910390fd5b6126ee838383612901565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b90613963565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612807919061302e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161286b9190612dbe565b60405180910390a361287e848484612906565b50505050565b600061288f30611003565b905060008114156128a057506128d3565b60146009546128af91906130e5565b8111156128c85760146009546128c591906130e5565b90505b6128d18161290b565b505b565b600081836128e391906130e5565b905092915050565b600081836128f9919061316e565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561292857612927613983565b5b6040519080825280602002602001820160405280156129565781602001602082028036833780820191505090505b509050308160008151811061296e5761296d6139b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106129df576129de6139b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a44307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a10565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612ac8959493929190613ada565b600060405180830381600087803b158015612ae257600080fd5b505af1158015612af6573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612b1681612b03565b8114612b2157600080fd5b50565b600081359050612b3381612b0d565b92915050565b60008060408385031215612b5057612b4f612afe565b5b6000612b5e85828601612b24565b9250506020612b6f85828601612b24565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612bb3578082015181840152602081019050612b98565b83811115612bc2576000848401525b50505050565b6000601f19601f8301169050919050565b6000612be482612b79565b612bee8185612b84565b9350612bfe818560208601612b95565b612c0781612bc8565b840191505092915050565b60006020820190508181036000830152612c2c8184612bd9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c5f82612c34565b9050919050565b612c6f81612c54565b8114612c7a57600080fd5b50565b600081359050612c8c81612c66565b92915050565b60008060408385031215612ca957612ca8612afe565b5b6000612cb785828601612c7d565b9250506020612cc885828601612b24565b9150509250929050565b60008115159050919050565b612ce781612cd2565b82525050565b6000602082019050612d026000830184612cde565b92915050565b600060208284031215612d1e57612d1d612afe565b5b6000612d2c84828501612c7d565b91505092915050565b6000819050919050565b6000612d5a612d55612d5084612c34565b612d35565b612c34565b9050919050565b6000612d6c82612d3f565b9050919050565b6000612d7e82612d61565b9050919050565b612d8e81612d73565b82525050565b6000602082019050612da96000830184612d85565b92915050565b612db881612b03565b82525050565b6000602082019050612dd36000830184612daf565b92915050565b600060208284031215612def57612dee612afe565b5b6000612dfd84828501612b24565b91505092915050565b600080600060608486031215612e1f57612e1e612afe565b5b6000612e2d86828701612c7d565b9350506020612e3e86828701612c7d565b9250506040612e4f86828701612b24565b9150509250925092565b612e6281612c54565b82525050565b6000602082019050612e7d6000830184612e59565b92915050565b600060ff82169050919050565b612e9981612e83565b82525050565b6000602082019050612eb46000830184612e90565b92915050565b612ec381612cd2565b8114612ece57600080fd5b50565b600081359050612ee081612eba565b92915050565b60008060408385031215612efd57612efc612afe565b5b6000612f0b85828601612c7d565b9250506020612f1c85828601612ed1565b9150509250929050565b600060208284031215612f3c57612f3b612afe565b5b6000612f4a84828501612ed1565b91505092915050565b60008060408385031215612f6a57612f69612afe565b5b6000612f7885828601612c7d565b9250506020612f8985828601612c7d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fc9602083612b84565b9150612fd482612f93565b602082019050919050565b60006020820190508181036000830152612ff881612fbc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061303982612b03565b915061304483612b03565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561307957613078612fff565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130cb57607f821691505b602082108114156130df576130de613084565b5b50919050565b60006130f082612b03565b91506130fb83612b03565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561313457613133612fff565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061317982612b03565b915061318483612b03565b9250826131945761319361313f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006131fb602f83612b84565b91506132068261319f565b604082019050919050565b6000602082019050818103600083015261322a816131ee565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061328d602883612b84565b915061329882613231565b604082019050919050565b600060208201905081810360008301526132bc81613280565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061331f602483612b84565b915061332a826132c3565b604082019050919050565b6000602082019050818103600083015261334e81613312565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006133b1603583612b84565b91506133bc82613355565b604082019050919050565b600060208201905081810360008301526133e0816133a4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613443603483612b84565b915061344e826133e7565b604082019050919050565b6000602082019050818103600083015261347281613436565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134d5602683612b84565b91506134e082613479565b604082019050919050565b60006020820190508181036000830152613504816134c8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613567602483612b84565b91506135728261350b565b604082019050919050565b600060208201905081810360008301526135968161355a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135f9602283612b84565b91506136048261359d565b604082019050919050565b60006020820190508181036000830152613628816135ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061368b602583612b84565b91506136968261362f565b604082019050919050565b600060208201905081810360008301526136ba8161367e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061371d602383612b84565b9150613728826136c1565b604082019050919050565b6000602082019050818103600083015261374c81613710565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613789601683612b84565b915061379482613753565b602082019050919050565b600060208201905081810360008301526137b88161377c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061381b603583612b84565b9150613826826137bf565b604082019050919050565b6000602082019050818103600083015261384a8161380e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613887601383612b84565b915061389282613851565b602082019050919050565b600060208201905081810360008301526138b68161387a565b9050919050565b60006138c882612b03565b91506138d383612b03565b9250828210156138e6576138e5612fff565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061394d602683612b84565b9150613958826138f1565b604082019050919050565b6000602082019050818103600083015261397c81613940565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613a06613a016139fc846139e1565b612d35565b612b03565b9050919050565b613a16816139eb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a5181612c54565b82525050565b6000613a638383613a48565b60208301905092915050565b6000602082019050919050565b6000613a8782613a1c565b613a918185613a27565b9350613a9c83613a38565b8060005b83811015613acd578151613ab48882613a57565b9750613abf83613a6f565b925050600181019050613aa0565b5085935050505092915050565b600060a082019050613aef6000830188612daf565b613afc6020830187613a0d565b8181036040830152613b0e8186613a7c565b9050613b1d6060830185612e59565b613b2a6080830184612daf565b969550505050505056fea2646970667358221220a47774af9005c814376cf39929e5000b347b551cfc646f74f5261634022ee08064736f6c634300080c0033

Deployed Bytecode Sourcemap

23438:10581:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28630:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8294:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10461:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24400:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23516:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9414:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29074:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27464:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11112:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23619:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9256:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23574:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23930:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29273:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28382:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24153:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24010:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9585:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1529:103;;;;;;;;;;;;;:::i;:::-;;26768:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28011:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26604:112;;;;;;;;;;;;;:::i;:::-;;878:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23782:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28274:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8513:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24083:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24188:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9925:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23679:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23970:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28884:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27747:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23815:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26959:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24049:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10163:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23857:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24114:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1787:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24220:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23897:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28630:246;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28762:7:::1;28749:10;:20;;;;28799:13;28780:16;:32;;;;28852:16;;28839:10;;:29;;;;:::i;:::-;28823:13;:45;;;;28630:246:::0;;:::o;8294:100::-;8348:13;8381:5;8374:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8294:100;:::o;10461:169::-;10544:4;10561:39;10570:12;:10;:12::i;:::-;10584:7;10593:6;10561:8;:39::i;:::-;10618:4;10611:11;;10461:169;;;;:::o;24400:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;23516:51::-;;;:::o;9414:108::-;9475:7;9502:12;;9495:19;;9414:108;:::o;29074:189::-;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29210:9:::1;;;;;;;;;;;29179:41;;29196:12;29179:41;;;;;;;;;;;;29243:12;29231:9;;:24;;;;;;;;;;;;;;;;;;29074:189:::0;:::o;27464:275::-;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27601:4:::1;27593;27588:1;27572:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27571:26;;;;:::i;:::-;27570:35;;;;:::i;:::-;27560:6;:45;;27538:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;27724:6;27714;:17;;;;:::i;:::-;27691:20;:40;;;;27464:275:::0;:::o;11112:492::-;11252:4;11269:36;11279:6;11287:9;11298:6;11269:9;:36::i;:::-;11318:24;11345:11;:19;11357:6;11345:19;;;;;;;;;;;;;;;:33;11365:12;:10;:12::i;:::-;11345:33;;;;;;;;;;;;;;;;11318:60;;11417:6;11397:16;:26;;11389:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11504:57;11513:6;11521:12;:10;:12::i;:::-;11554:6;11535:16;:25;11504:8;:57::i;:::-;11592:4;11585:11;;;11112:492;;;;;:::o;23619:53::-;23665:6;23619:53;:::o;9256:93::-;9314:5;9339:2;9332:9;;9256:93;:::o;23574:38::-;;;:::o;23930:33::-;;;;;;;;;;;;;:::o;29273:126::-;29339:4;29363:19;:28;29383:7;29363:28;;;;;;;;;;;;;;;;;;;;;;;;;29356:35;;29273:126;;;:::o;28382:240::-;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28512:7:::1;28500:9;:19;;;;28548:13;28530:15;:31;;;;28599:15;;28587:9;;:27;;;;:::i;:::-;28572:12;:42;;;;28382:240:::0;;:::o;24153:28::-;;;;:::o;24010:30::-;;;;;;;;;;;;;:::o;9585:127::-;9659:7;9686:9;:18;9696:7;9686:18;;;;;;;;;;;;;;;;9679:25;;9585:127;;;:::o;1529:103::-;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1594:30:::1;1621:1;1594:18;:30::i;:::-;1529:103::o:0;26768:121::-;26820:4;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26854:5:::1;26837:14;;:22;;;;;;;;;;;;;;;;;;26877:4;26870:11;;26768:121:::0;:::o;28011:167::-;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28166:4:::1;28124:31;:39;28156:6;28124:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28011:167:::0;;:::o;26604:112::-;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26675:4:::1;26659:13;;:20;;;;;;;;;;;;;;;;;;26704:4;26690:11;;:18;;;;;;;;;;;;;;;;;;26604:112::o:0;878:87::-;924:7;951:6;;;;;;;;;;;944:13;;878:87;:::o;23782:24::-;;;;;;;;;;;;;:::o;28274:100::-;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28359:7:::1;28345:11;;:21;;;;;;;;;;;;;;;;;;28274:100:::0;:::o;8513:104::-;8569:13;8602:7;8595:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8513:104;:::o;24083:24::-;;;;:::o;24188:25::-;;;;:::o;9925:175::-;10011:4;10028:42;10038:12;:10;:12::i;:::-;10052:9;10063:6;10028:9;:42::i;:::-;10088:4;10081:11;;9925:175;;;;:::o;23679:64::-;;;;;;;;;;;;;:::o;23970:33::-;;;;;;;;;;;;;:::o;28884:182::-;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29000:8:::1;28969:19;:28;28989:7;28969:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;29040:7;29024:34;;;29049:8;29024:34;;;;;;:::i;:::-;;;;;;;;28884:182:::0;;:::o;27747:256::-;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27887:4:::1;27879;27874:1;27858:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27857:26;;;;:::i;:::-;27856:35;;;;:::i;:::-;27846:6;:45;;27824:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;27988:6;27978;:17;;;;:::i;:::-;27966:9;:29;;;;27747:256:::0;:::o;23815:35::-;;;;:::o;26959:497::-;27067:4;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27146:6:::1;27141:1;27125:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27124:28;;;;:::i;:::-;27111:9;:41;;27089:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;27301:4;27296:1;27280:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27279:26;;;;:::i;:::-;27266:9;:39;;27244:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;27417:9;27396:18;:30;;;;27444:4;27437:11;;26959:497:::0;;;:::o;24049:27::-;;;;:::o;10163:151::-;10252:7;10279:11;:18;10291:5;10279:18;;;;;;;;;;;;;;;:27;10298:7;10279:27;;;;;;;;;;;;;;;;10272:34;;10163:151;;;;:::o;23857:33::-;;;;:::o;24114:30::-;;;;:::o;1787:201::-;1109:12;:10;:12::i;:::-;1098:23;;:7;:5;:7::i;:::-;:23;;;1090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1896:1:::1;1876:22;;:8;:22;;;;1868:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1952:28;1971:8;1952:18;:28::i;:::-;1787:201:::0;:::o;24220:31::-;;;;:::o;23897:24::-;;;;:::o;250:98::-;303:7;330:10;323:17;;250:98;:::o;13953:380::-;14106:1;14089:19;;:5;:19;;;;14081:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14187:1;14168:21;;:7;:21;;;;14160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14271:6;14241:11;:18;14253:5;14241:18;;;;;;;;;;;;;;;:27;14260:7;14241:27;;;;;;;;;;;;;;;:36;;;;14309:7;14293:32;;14302:5;14293:32;;;14318:6;14293:32;;;;;;:::i;:::-;;;;;;;;13953:380;;;:::o;29407:3679::-;29555:1;29539:18;;:4;:18;;;;29531:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29632:1;29618:16;;:2;:16;;;;29610:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29701:1;29691:6;:11;29687:93;;;29719:28;29735:4;29741:2;29745:1;29719:15;:28::i;:::-;29762:7;;29687:93;29796:14;;;;;;;;;;;29792:1430;;;29857:7;:5;:7::i;:::-;29849:15;;:4;:15;;;;:49;;;;;29891:7;:5;:7::i;:::-;29885:13;;:2;:13;;;;29849:49;:86;;;;;29933:1;29919:16;;:2;:16;;;;29849:86;:128;;;;;29970:6;29956:21;;:2;:21;;;;29849:128;:158;;;;;29999:8;;;;;;;;;;;29998:9;29849:158;29827:1384;;;30047:13;;;;;;;;;;;30042:223;;30119:19;:25;30139:4;30119:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30148:19;:23;30168:2;30148:23;;;;;;;;;;;;;;;;;;;;;;;;;30119:52;30085:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;30042:223;30479:13;30471:21;;:4;:21;;;:82;;;;;30518:31;:35;30550:2;30518:35;;;;;;;;;;;;;;;;;;;;;;;;;30517:36;30471:82;30445:751;;;30640:20;;30630:6;:30;;30596:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;30848:9;;30831:13;30841:2;30831:9;:13::i;:::-;30822:6;:22;;;;:::i;:::-;:35;;30788:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30445:751;;;30976:31;:35;31008:2;30976:35;;;;;;;;;;;;;;;;;;;;;;;;;30971:225;;31096:9;;31079:13;31089:2;31079:9;:13::i;:::-;31070:6;:22;;;;:::i;:::-;:35;;31036:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30971:225;30445:751;29827:1384;29792:1430;31234:28;31265:24;31283:4;31265:9;:24::i;:::-;31234:55;;31302:12;31341:18;;31317:20;:42;;31302:57;;31390:7;:35;;;;;31414:11;;;;;;;;;;;31390:35;:61;;;;;31443:8;;;;;;;;;;;31442:9;31390:61;:97;;;;;31474:13;31468:19;;:2;:19;;;31390:97;:140;;;;;31505:19;:25;31525:4;31505:25;;;;;;;;;;;;;;;;;;;;;;;;;31504:26;31390:140;:181;;;;;31548:19;:23;31568:2;31548:23;;;;;;;;;;;;;;;;;;;;;;;;;31547:24;31390:181;31372:313;;;31609:4;31598:8;;:15;;;;;;;;;;;;;;;;;;31630:10;:8;:10::i;:::-;31668:5;31657:8;;:16;;;;;;;;;;;;;;;;;;31372:313;31697:12;31713:8;;;;;;;;;;;31712:9;31697:24;;31823:19;:25;31843:4;31823:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31852:19;:23;31872:2;31852:23;;;;;;;;;;;;;;;;;;;;;;;;;31823:52;31819:100;;;31902:5;31892:15;;31819:100;31931:12;31958:26;31999:20;32112:7;32108:925;;;32170:13;32164:19;;:2;:19;;;:40;;;;;32203:1;32187:13;;:17;32164:40;32160:583;;;32232:34;32262:3;32232:25;32243:13;;32232:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;32225:41;;32334:13;;32314:16;;32307:4;:23;;;;:::i;:::-;32306:41;;;;:::i;:::-;32285:62;;32403:13;;32389:10;;32382:4;:17;;;;:::i;:::-;32381:35;;;;:::i;:::-;32366:50;;32160:583;;;32486:13;32478:21;;:4;:21;;;:41;;;;;32518:1;32503:12;;:16;32478:41;32474:269;;;32547:33;32576:3;32547:24;32558:12;;32547:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;32540:40;;32647:12;;32628:15;;32621:4;:22;;;;:::i;:::-;32620:39;;;;:::i;:::-;32599:60;;32715:12;;32702:9;;32695:4;:16;;;;:::i;:::-;32694:33;;;;:::i;:::-;32679:48;;32474:269;32160:583;32769:1;32763:4;:7;32759:90;;;32791:42;32807:4;32821;32828;32791:15;:42::i;:::-;32759:90;32888:1;32867:18;:22;32863:128;;;32910:65;32934:4;32941:13;32956:18;32910:15;:65::i;:::-;32863:128;33017:4;33007:14;;;;;:::i;:::-;;;32108:925;33045:33;33061:4;33067:2;33071:6;33045:15;:33::i;:::-;29520:3566;;;;;;29407:3679;;;;:::o;2148:191::-;2222:16;2241:6;;;;;;;;;;;2222:25;;2267:8;2258:6;;:17;;;;;;;;;;;;;;;;;;2322:8;2291:40;;2312:8;2291:40;;;;;;;;;;;;2211:128;2148:191;:::o;12094:733::-;12252:1;12234:20;;:6;:20;;;;12226:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12336:1;12315:23;;:9;:23;;;;12307:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12391:47;12412:6;12420:9;12431:6;12391:20;:47::i;:::-;12451:21;12475:9;:17;12485:6;12475:17;;;;;;;;;;;;;;;;12451:41;;12528:6;12511:13;:23;;12503:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12649:6;12633:13;:22;12613:9;:17;12623:6;12613:17;;;;;;;;;;;;;;;:42;;;;12701:6;12677:9;:20;12687:9;12677:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12742:9;12725:35;;12734:6;12725:35;;;12753:6;12725:35;;;;;;:::i;:::-;;;;;;;;12773:46;12793:6;12801:9;12812:6;12773:19;:46::i;:::-;12215:612;12094:733;;;:::o;33674:340::-;33713:23;33739:24;33757:4;33739:9;:24::i;:::-;33713:50;;33797:1;33778:15;:20;33774:59;;;33815:7;;;33774:59;33888:2;33867:18;;:23;;;;:::i;:::-;33849:15;:41;33845:115;;;33946:2;33925:18;;:23;;;;:::i;:::-;33907:41;;33845:115;33972:34;33990:15;33972:17;:34::i;:::-;33702:312;33674:340;:::o;19406:98::-;19464:7;19495:1;19491;:5;;;;:::i;:::-;19484:12;;19406:98;;;;:::o;19805:::-;19863:7;19894:1;19890;:5;;;;:::i;:::-;19883:12;;19805:98;;;;:::o;14933:125::-;;;;:::o;15662:124::-;;;;:::o;33094:572::-;33221:21;33259:1;33245:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33221:40;;33290:4;33272;33277:1;33272:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33316:4;;;;;;;;;;;33306;33311:1;33306:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;33333:62;33350:4;33365:15;33383:11;33333:8;:62::i;:::-;33434:15;:69;;;33518:11;33544:1;33589:4;33608:9;;;;;;;;;;;33632:15;33434:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33150:516;33094:572;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:152::-;4731:9;4764:37;4795:5;4764:37;:::i;:::-;4751:50;;4655:152;;;:::o;4813:183::-;4926:63;4983:5;4926:63;:::i;:::-;4921:3;4914:76;4813:183;;:::o;5002:274::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:97;5266:1;5255:9;5251:17;5242:6;5172:97;:::i;:::-;5002:274;;;;:::o;5282:118::-;5369:24;5387:5;5369:24;:::i;:::-;5364:3;5357:37;5282:118;;:::o;5406:222::-;5499:4;5537:2;5526:9;5522:18;5514:26;;5550:71;5618:1;5607:9;5603:17;5594:6;5550:71;:::i;:::-;5406:222;;;;:::o;5634:329::-;5693:6;5742:2;5730:9;5721:7;5717:23;5713:32;5710:119;;;5748:79;;:::i;:::-;5710:119;5868:1;5893:53;5938:7;5929:6;5918:9;5914:22;5893:53;:::i;:::-;5883:63;;5839:117;5634:329;;;;:::o;5969:619::-;6046:6;6054;6062;6111:2;6099:9;6090:7;6086:23;6082:32;6079:119;;;6117:79;;:::i;:::-;6079:119;6237:1;6262:53;6307:7;6298:6;6287:9;6283:22;6262:53;:::i;:::-;6252:63;;6208:117;6364:2;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6335:118;6492:2;6518:53;6563:7;6554:6;6543:9;6539:22;6518:53;:::i;:::-;6508:63;;6463:118;5969:619;;;;;:::o;6594:118::-;6681:24;6699:5;6681:24;:::i;:::-;6676:3;6669:37;6594:118;;:::o;6718:222::-;6811:4;6849:2;6838:9;6834:18;6826:26;;6862:71;6930:1;6919:9;6915:17;6906:6;6862:71;:::i;:::-;6718:222;;;;:::o;6946:86::-;6981:7;7021:4;7014:5;7010:16;6999:27;;6946:86;;;:::o;7038:112::-;7121:22;7137:5;7121:22;:::i;:::-;7116:3;7109:35;7038:112;;:::o;7156:214::-;7245:4;7283:2;7272:9;7268:18;7260:26;;7296:67;7360:1;7349:9;7345:17;7336:6;7296:67;:::i;:::-;7156:214;;;;:::o;7376:116::-;7446:21;7461:5;7446:21;:::i;:::-;7439:5;7436:32;7426:60;;7482:1;7479;7472:12;7426:60;7376:116;:::o;7498:133::-;7541:5;7579:6;7566:20;7557:29;;7595:30;7619:5;7595:30;:::i;:::-;7498:133;;;;:::o;7637:468::-;7702:6;7710;7759:2;7747:9;7738:7;7734:23;7730:32;7727:119;;;7765:79;;:::i;:::-;7727:119;7885:1;7910:53;7955:7;7946:6;7935:9;7931:22;7910:53;:::i;:::-;7900:63;;7856:117;8012:2;8038:50;8080:7;8071:6;8060:9;8056:22;8038:50;:::i;:::-;8028:60;;7983:115;7637:468;;;;;:::o;8111:323::-;8167:6;8216:2;8204:9;8195:7;8191:23;8187:32;8184:119;;;8222:79;;:::i;:::-;8184:119;8342:1;8367:50;8409:7;8400:6;8389:9;8385:22;8367:50;:::i;:::-;8357:60;;8313:114;8111:323;;;;:::o;8440:474::-;8508:6;8516;8565:2;8553:9;8544:7;8540:23;8536:32;8533:119;;;8571:79;;:::i;:::-;8533:119;8691:1;8716:53;8761:7;8752:6;8741:9;8737:22;8716:53;:::i;:::-;8706:63;;8662:117;8818:2;8844:53;8889:7;8880:6;8869:9;8865:22;8844:53;:::i;:::-;8834:63;;8789:118;8440:474;;;;;:::o;8920:182::-;9060:34;9056:1;9048:6;9044:14;9037:58;8920:182;:::o;9108:366::-;9250:3;9271:67;9335:2;9330:3;9271:67;:::i;:::-;9264:74;;9347:93;9436:3;9347:93;:::i;:::-;9465:2;9460:3;9456:12;9449:19;;9108:366;;;:::o;9480:419::-;9646:4;9684:2;9673:9;9669:18;9661:26;;9733:9;9727:4;9723:20;9719:1;9708:9;9704:17;9697:47;9761:131;9887:4;9761:131;:::i;:::-;9753:139;;9480:419;;;:::o;9905:180::-;9953:77;9950:1;9943:88;10050:4;10047:1;10040:15;10074:4;10071:1;10064:15;10091:305;10131:3;10150:20;10168:1;10150:20;:::i;:::-;10145:25;;10184:20;10202:1;10184:20;:::i;:::-;10179:25;;10338:1;10270:66;10266:74;10263:1;10260:81;10257:107;;;10344:18;;:::i;:::-;10257:107;10388:1;10385;10381:9;10374:16;;10091:305;;;;:::o;10402:180::-;10450:77;10447:1;10440:88;10547:4;10544:1;10537:15;10571:4;10568:1;10561:15;10588:320;10632:6;10669:1;10663:4;10659:12;10649:22;;10716:1;10710:4;10706:12;10737:18;10727:81;;10793:4;10785:6;10781:17;10771:27;;10727:81;10855:2;10847:6;10844:14;10824:18;10821:38;10818:84;;;10874:18;;:::i;:::-;10818:84;10639:269;10588:320;;;:::o;10914:348::-;10954:7;10977:20;10995:1;10977:20;:::i;:::-;10972:25;;11011:20;11029:1;11011:20;:::i;:::-;11006:25;;11199:1;11131:66;11127:74;11124:1;11121:81;11116:1;11109:9;11102:17;11098:105;11095:131;;;11206:18;;:::i;:::-;11095:131;11254:1;11251;11247:9;11236:20;;10914:348;;;;:::o;11268:180::-;11316:77;11313:1;11306:88;11413:4;11410:1;11403:15;11437:4;11434:1;11427:15;11454:185;11494:1;11511:20;11529:1;11511:20;:::i;:::-;11506:25;;11545:20;11563:1;11545:20;:::i;:::-;11540:25;;11584:1;11574:35;;11589:18;;:::i;:::-;11574:35;11631:1;11628;11624:9;11619:14;;11454:185;;;;:::o;11645:234::-;11785:34;11781:1;11773:6;11769:14;11762:58;11854:17;11849:2;11841:6;11837:15;11830:42;11645:234;:::o;11885:366::-;12027:3;12048:67;12112:2;12107:3;12048:67;:::i;:::-;12041:74;;12124:93;12213:3;12124:93;:::i;:::-;12242:2;12237:3;12233:12;12226:19;;11885:366;;;:::o;12257:419::-;12423:4;12461:2;12450:9;12446:18;12438:26;;12510:9;12504:4;12500:20;12496:1;12485:9;12481:17;12474:47;12538:131;12664:4;12538:131;:::i;:::-;12530:139;;12257:419;;;:::o;12682:227::-;12822:34;12818:1;12810:6;12806:14;12799:58;12891:10;12886:2;12878:6;12874:15;12867:35;12682:227;:::o;12915:366::-;13057:3;13078:67;13142:2;13137:3;13078:67;:::i;:::-;13071:74;;13154:93;13243:3;13154:93;:::i;:::-;13272:2;13267:3;13263:12;13256:19;;12915:366;;;:::o;13287:419::-;13453:4;13491:2;13480:9;13476:18;13468:26;;13540:9;13534:4;13530:20;13526:1;13515:9;13511:17;13504:47;13568:131;13694:4;13568:131;:::i;:::-;13560:139;;13287:419;;;:::o;13712:223::-;13852:34;13848:1;13840:6;13836:14;13829:58;13921:6;13916:2;13908:6;13904:15;13897:31;13712:223;:::o;13941:366::-;14083:3;14104:67;14168:2;14163:3;14104:67;:::i;:::-;14097:74;;14180:93;14269:3;14180:93;:::i;:::-;14298:2;14293:3;14289:12;14282:19;;13941:366;;;:::o;14313:419::-;14479:4;14517:2;14506:9;14502:18;14494:26;;14566:9;14560:4;14556:20;14552:1;14541:9;14537:17;14530:47;14594:131;14720:4;14594:131;:::i;:::-;14586:139;;14313:419;;;:::o;14738:240::-;14878:34;14874:1;14866:6;14862:14;14855:58;14947:23;14942:2;14934:6;14930:15;14923:48;14738:240;:::o;14984:366::-;15126:3;15147:67;15211:2;15206:3;15147:67;:::i;:::-;15140:74;;15223:93;15312:3;15223:93;:::i;:::-;15341:2;15336:3;15332:12;15325:19;;14984:366;;;:::o;15356:419::-;15522:4;15560:2;15549:9;15545:18;15537:26;;15609:9;15603:4;15599:20;15595:1;15584:9;15580:17;15573:47;15637:131;15763:4;15637:131;:::i;:::-;15629:139;;15356:419;;;:::o;15781:239::-;15921:34;15917:1;15909:6;15905:14;15898:58;15990:22;15985:2;15977:6;15973:15;15966:47;15781:239;:::o;16026:366::-;16168:3;16189:67;16253:2;16248:3;16189:67;:::i;:::-;16182:74;;16265:93;16354:3;16265:93;:::i;:::-;16383:2;16378:3;16374:12;16367:19;;16026:366;;;:::o;16398:419::-;16564:4;16602:2;16591:9;16587:18;16579:26;;16651:9;16645:4;16641:20;16637:1;16626:9;16622:17;16615:47;16679:131;16805:4;16679:131;:::i;:::-;16671:139;;16398:419;;;:::o;16823:225::-;16963:34;16959:1;16951:6;16947:14;16940:58;17032:8;17027:2;17019:6;17015:15;17008:33;16823:225;:::o;17054:366::-;17196:3;17217:67;17281:2;17276:3;17217:67;:::i;:::-;17210:74;;17293:93;17382:3;17293:93;:::i;:::-;17411:2;17406:3;17402:12;17395:19;;17054:366;;;:::o;17426:419::-;17592:4;17630:2;17619:9;17615:18;17607:26;;17679:9;17673:4;17669:20;17665:1;17654:9;17650:17;17643:47;17707:131;17833:4;17707:131;:::i;:::-;17699:139;;17426:419;;;:::o;17851:223::-;17991:34;17987:1;17979:6;17975:14;17968:58;18060:6;18055:2;18047:6;18043:15;18036:31;17851:223;:::o;18080:366::-;18222:3;18243:67;18307:2;18302:3;18243:67;:::i;:::-;18236:74;;18319:93;18408:3;18319:93;:::i;:::-;18437:2;18432:3;18428:12;18421:19;;18080:366;;;:::o;18452:419::-;18618:4;18656:2;18645:9;18641:18;18633:26;;18705:9;18699:4;18695:20;18691:1;18680:9;18676:17;18669:47;18733:131;18859:4;18733:131;:::i;:::-;18725:139;;18452:419;;;:::o;18877:221::-;19017:34;19013:1;19005:6;19001:14;18994:58;19086:4;19081:2;19073:6;19069:15;19062:29;18877:221;:::o;19104:366::-;19246:3;19267:67;19331:2;19326:3;19267:67;:::i;:::-;19260:74;;19343:93;19432:3;19343:93;:::i;:::-;19461:2;19456:3;19452:12;19445:19;;19104:366;;;:::o;19476:419::-;19642:4;19680:2;19669:9;19665:18;19657:26;;19729:9;19723:4;19719:20;19715:1;19704:9;19700:17;19693:47;19757:131;19883:4;19757:131;:::i;:::-;19749:139;;19476:419;;;:::o;19901:224::-;20041:34;20037:1;20029:6;20025:14;20018:58;20110:7;20105:2;20097:6;20093:15;20086:32;19901:224;:::o;20131:366::-;20273:3;20294:67;20358:2;20353:3;20294:67;:::i;:::-;20287:74;;20370:93;20459:3;20370:93;:::i;:::-;20488:2;20483:3;20479:12;20472:19;;20131:366;;;:::o;20503:419::-;20669:4;20707:2;20696:9;20692:18;20684:26;;20756:9;20750:4;20746:20;20742:1;20731:9;20727:17;20720:47;20784:131;20910:4;20784:131;:::i;:::-;20776:139;;20503:419;;;:::o;20928:222::-;21068:34;21064:1;21056:6;21052:14;21045:58;21137:5;21132:2;21124:6;21120:15;21113:30;20928:222;:::o;21156:366::-;21298:3;21319:67;21383:2;21378:3;21319:67;:::i;:::-;21312:74;;21395:93;21484:3;21395:93;:::i;:::-;21513:2;21508:3;21504:12;21497:19;;21156:366;;;:::o;21528:419::-;21694:4;21732:2;21721:9;21717:18;21709:26;;21781:9;21775:4;21771:20;21767:1;21756:9;21752:17;21745:47;21809:131;21935:4;21809:131;:::i;:::-;21801:139;;21528:419;;;:::o;21953:172::-;22093:24;22089:1;22081:6;22077:14;22070:48;21953:172;:::o;22131:366::-;22273:3;22294:67;22358:2;22353:3;22294:67;:::i;:::-;22287:74;;22370:93;22459:3;22370:93;:::i;:::-;22488:2;22483:3;22479:12;22472:19;;22131:366;;;:::o;22503:419::-;22669:4;22707:2;22696:9;22692:18;22684:26;;22756:9;22750:4;22746:20;22742:1;22731:9;22727:17;22720:47;22784:131;22910:4;22784:131;:::i;:::-;22776:139;;22503:419;;;:::o;22928:240::-;23068:34;23064:1;23056:6;23052:14;23045:58;23137:23;23132:2;23124:6;23120:15;23113:48;22928:240;:::o;23174:366::-;23316:3;23337:67;23401:2;23396:3;23337:67;:::i;:::-;23330:74;;23413:93;23502:3;23413:93;:::i;:::-;23531:2;23526:3;23522:12;23515:19;;23174:366;;;:::o;23546:419::-;23712:4;23750:2;23739:9;23735:18;23727:26;;23799:9;23793:4;23789:20;23785:1;23774:9;23770:17;23763:47;23827:131;23953:4;23827:131;:::i;:::-;23819:139;;23546:419;;;:::o;23971:169::-;24111:21;24107:1;24099:6;24095:14;24088:45;23971:169;:::o;24146:366::-;24288:3;24309:67;24373:2;24368:3;24309:67;:::i;:::-;24302:74;;24385:93;24474:3;24385:93;:::i;:::-;24503:2;24498:3;24494:12;24487:19;;24146:366;;;:::o;24518:419::-;24684:4;24722:2;24711:9;24707:18;24699:26;;24771:9;24765:4;24761:20;24757:1;24746:9;24742:17;24735:47;24799:131;24925:4;24799:131;:::i;:::-;24791:139;;24518:419;;;:::o;24943:191::-;24983:4;25003:20;25021:1;25003:20;:::i;:::-;24998:25;;25037:20;25055:1;25037:20;:::i;:::-;25032:25;;25076:1;25073;25070:8;25067:34;;;25081:18;;:::i;:::-;25067:34;25126:1;25123;25119:9;25111:17;;24943:191;;;;:::o;25140:225::-;25280:34;25276:1;25268:6;25264:14;25257:58;25349:8;25344:2;25336:6;25332:15;25325:33;25140:225;:::o;25371:366::-;25513:3;25534:67;25598:2;25593:3;25534:67;:::i;:::-;25527:74;;25610:93;25699:3;25610:93;:::i;:::-;25728:2;25723:3;25719:12;25712:19;;25371:366;;;:::o;25743:419::-;25909:4;25947:2;25936:9;25932:18;25924:26;;25996:9;25990:4;25986:20;25982:1;25971:9;25967:17;25960:47;26024:131;26150:4;26024:131;:::i;:::-;26016:139;;25743:419;;;:::o;26168:180::-;26216:77;26213:1;26206:88;26313:4;26310:1;26303:15;26337:4;26334:1;26327:15;26354:180;26402:77;26399:1;26392:88;26499:4;26496:1;26489:15;26523:4;26520:1;26513:15;26540:85;26585:7;26614:5;26603:16;;26540:85;;;:::o;26631:158::-;26689:9;26722:61;26740:42;26749:32;26775:5;26749:32;:::i;:::-;26740:42;:::i;:::-;26722:61;:::i;:::-;26709:74;;26631:158;;;:::o;26795:147::-;26890:45;26929:5;26890:45;:::i;:::-;26885:3;26878:58;26795:147;;:::o;26948:114::-;27015:6;27049:5;27043:12;27033:22;;26948:114;;;:::o;27068:184::-;27167:11;27201:6;27196:3;27189:19;27241:4;27236:3;27232:14;27217:29;;27068:184;;;;:::o;27258:132::-;27325:4;27348:3;27340:11;;27378:4;27373:3;27369:14;27361:22;;27258:132;;;:::o;27396:108::-;27473:24;27491:5;27473:24;:::i;:::-;27468:3;27461:37;27396:108;;:::o;27510:179::-;27579:10;27600:46;27642:3;27634:6;27600:46;:::i;:::-;27678:4;27673:3;27669:14;27655:28;;27510:179;;;;:::o;27695:113::-;27765:4;27797;27792:3;27788:14;27780:22;;27695:113;;;:::o;27844:732::-;27963:3;27992:54;28040:5;27992:54;:::i;:::-;28062:86;28141:6;28136:3;28062:86;:::i;:::-;28055:93;;28172:56;28222:5;28172:56;:::i;:::-;28251:7;28282:1;28267:284;28292:6;28289:1;28286:13;28267:284;;;28368:6;28362:13;28395:63;28454:3;28439:13;28395:63;:::i;:::-;28388:70;;28481:60;28534:6;28481:60;:::i;:::-;28471:70;;28327:224;28314:1;28311;28307:9;28302:14;;28267:284;;;28271:14;28567:3;28560:10;;27968:608;;;27844:732;;;;:::o;28582:831::-;28845:4;28883:3;28872:9;28868:19;28860:27;;28897:71;28965:1;28954:9;28950:17;28941:6;28897:71;:::i;:::-;28978:80;29054:2;29043:9;29039:18;29030:6;28978:80;:::i;:::-;29105:9;29099:4;29095:20;29090:2;29079:9;29075:18;29068:48;29133:108;29236:4;29227:6;29133:108;:::i;:::-;29125:116;;29251:72;29319:2;29308:9;29304:18;29295:6;29251:72;:::i;:::-;29333:73;29401:3;29390:9;29386:19;29377:6;29333:73;:::i;:::-;28582:831;;;;;;;;:::o

Swarm Source

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