ETH Price: $3,110.85 (-0.94%)

Token

HORSE TOKEN (HORSE)
 

Overview

Max Total Supply

25,065,300 HORSE

Holders

1,058

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,000 HORSE

Value
$0.00
0xd42aeae643cd863a3ccc1484d2b43dd289fac001
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:
TUHY

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-09
*/

/**
 * TUHY 
    TOTAL 5% tax:
    Auto Send to team wallet address.
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;


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

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

// 
/**
 * @dev 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);
}

interface IHorse {
    
    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);
}
// 
/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// 
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// 
/**
 * @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 guidelines: functions revert instead
 * of 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 {
    using SafeMath for uint256;
    using Address for address;
    
    
    mapping (address => uint256) private _balances;
    mapping(address => bool) public feeExcludedAddress;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (uint256 => bool) public isAirdroped;
    mapping (uint256 => uint256) lastReward;

    uint256 private _totalSupply;
    // Daily Rewards Distributions Start from
    uint256 private rewardStartDate;
    bool public dailyReward = false;
    uint256 public rewardAmount = 2 ether;
    // ends in a month;
    uint256 public airdropEndDate = 1634991797;
    

    string private _name;
    string private _symbol;
    uint private _decimals = 18;
    uint private _lockTime;
    address public _Owner;
    address public _previousOwner;
    address public _fundAddress;
    address public liquidityPair;
    uint public teamFee = 500; //0.2% divisor 100
    bool public sellLimiter; //by default false
    uint public sellLimit = 50000 * 10 ** 18; //sell limit if sellLimiter is true
    IHorse public horseContract;
    
    uint256 public _maxTxAmount = 5000000 * 10**18;
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event airdropClaimed(uint256 tokenID, address tokenOwner);
    event claimedDailyReward(uint256 tokenID, address claimer, uint256 timestamp);

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory _nm, string memory _sym, IHorse _horseContract) public {
        _name = _nm;
        _symbol = _sym;
        _Owner = msg.sender;
        rewardStartDate = block.timestamp;
        horseContract = _horseContract;
        feeExcludedAddress[msg.sender] = true;
        _fundAddress = address(0xA25D6e6E02D1fD7A886b83A906c91cde7eD8DdFC);
    }
    
    modifier onlyOwner{
        require(msg.sender == _Owner, 'Only Owner Can Call This Function');
        _;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view 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 {_setupDecimals} is
     * called.
     *
     * 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 returns (uint) {
        return _decimals;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }
    
    function calculateTeamFee(uint256 _amount) internal view returns (uint256) {
        return _amount.mul(teamFee).div(
            10**4
        );
    }
    
    function setTeamFee(uint Tfee) public onlyOwner{
        require(Tfee < 1500," Fee can't exceed to 15%");
        teamFee = Tfee;
    }
    
    function toggleSellLimit() external onlyOwner() {
        sellLimiter = !sellLimiter;
    }
    
    function stopReward() external onlyOwner() {
        require(dailyReward, "Daily Reward Already Stopped");
        dailyReward = false;
    }
    
    function startReward() public onlyOwner{
        require(!dailyReward, "Daily Reward Already Running");
        dailyReward = true;
        rewardStartDate = block.timestamp;
    }
    
    function changeRewardAmount(uint256 _amount) public onlyOwner{
        rewardAmount = _amount;
    }
    
    function setLiquidityPairAddress(address liquidityPairAddress) public onlyOwner{
        liquidityPair = liquidityPairAddress;
    }
    
    function changeSellLimit(uint256 _sellLimit) public onlyOwner{
        sellLimit = _sellLimit;
    }
    
    function changeMaxtx(uint256 _maxtx) public onlyOwner{
        _maxTxAmount = _maxtx;
    }
    
    function changeFundAddress(address Taddress) public onlyOwner{
        _fundAddress = Taddress;
    }
    
    function changeAirdropEndDate(uint256 endDate) public onlyOwner{
        require(endDate > block.timestamp,"End Date must be a future timestamp");
        airdropEndDate = endDate;
    }
    
    function addExcludedAddress(address excludedA) public onlyOwner{
        feeExcludedAddress[excludedA] = true;
    }
    
    function removeExcludedAddress(address excludedA) public onlyOwner{
        feeExcludedAddress[excludedA] = false;
    }
    
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_Owner, newOwner);
        _Owner = newOwner;
    }

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

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _Owner;
        _Owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_Owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_Owner, _previousOwner);
        _Owner = _previousOwner;
    }
    
    function multiTransfer(address[] memory receivers, uint256[] memory amounts) public {
        require(receivers.length != 0, 'Cannot Proccess Null Transaction');
        require(receivers.length == amounts.length, 'Address and Amount array length must be same');
        for (uint256 i = 0; i < receivers.length; i++) {
            transfer(receivers[i], amounts[i]);
        }
    }

    /**
     * @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) {
        if(feeExcludedAddress[recipient] || feeExcludedAddress[_msgSender()]){
            _transferExcluded(_msgSender(), recipient, amount);
        }else{
            _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) {
        if(feeExcludedAddress[recipient] || feeExcludedAddress[sender]){
            _transferExcluded(sender, recipient, amount);
        }else{
            _transfer(sender, recipient, amount);
        }
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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 _transferExcluded(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");
        if(sender != _Owner && recipient != _Owner)
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            
        if(recipient == liquidityPair && balanceOf(liquidityPair) > 0 && sellLimiter){
            require(amount < sellLimit, 'Cannot sell more than sellLimit');
        }

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, 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");
        if(sender != _Owner && recipient != _Owner)
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        if(recipient == liquidityPair && balanceOf(liquidityPair) > 0 && sellLimiter){
            require(amount < sellLimit, 'Cannot sell more than sellLimit');
        }
        
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        uint256 tokenToTransfer = amount.sub(calculateTeamFee(amount));
        _balances[recipient] += tokenToTransfer;
        _balances[_fundAddress] += calculateTeamFee(amount); 
        
        emit Transfer(sender, recipient, tokenToTransfer);
    }

    /** @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
     *
     * - `to` 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    
    function addSupply(uint256 amount) public onlyOwner{
        _mint(msg.sender, amount);
    }
    
    function claimAirdrop(uint256 tokenID) public {
        require(airdropEndDate > block.timestamp, "Airdrop is ended");
        require(horseContract.ownerOf(tokenID) == msg.sender, "You aren't own this NFT token");
        require(!isAirdroped[tokenID],"This token ID already claimed airdrop");
        _mint(msg.sender, 1000 ether);
        isAirdroped[tokenID] = true;
        emit airdropClaimed(tokenID, msg.sender);
    }
    
    function bulkClaimAirdrop(uint256[] memory tokenIDs) public {
        require(airdropEndDate > block.timestamp, "Airdrop is ended");
        for (uint256 i = 0; i < tokenIDs.length; i++) {
            require(horseContract.ownerOf(tokenIDs[i]) == msg.sender, "You aren't own this NFT token");
            require(!isAirdroped[tokenIDs[i]],"This token ID already claimed airdrop"); 
            _mint(msg.sender, 1000 ether);
            isAirdroped[tokenIDs[i]] = true;
            emit airdropClaimed(tokenIDs[i], msg.sender);
        }
    }
    
    function checkDailyReward(uint256 tokenID) public view returns (uint256){
        uint256 lastdate = (lastReward[tokenID] > rewardStartDate) ? lastReward[tokenID] : rewardStartDate;
        uint256 rewardDays = (block.timestamp - lastdate).div(1 days);
        return rewardDays.mul(rewardAmount);
    }
    
    function claimDailyReward(uint256 tokenID) public {
        require(dailyReward," Daily Rewards Are Stopped ");
        require(horseContract.ownerOf(tokenID) == msg.sender, "You aren't own this NFT token");
        require(checkDailyReward(tokenID) > 0, "There is no claimable reward");
        _mint(msg.sender, checkDailyReward(tokenID));
        lastReward[tokenID] = block.timestamp;
        emit claimedDailyReward(tokenID, msg.sender, block.timestamp);
    }
    
    function bulkClaimRewards(uint256[] memory tokenIDs) public {
        require(dailyReward," Daily Rewards Are Stopped ");
        uint256 total;
        for (uint256 i = 0; i < tokenIDs.length; i++) {
            require(horseContract.ownerOf(tokenIDs[i]) == msg.sender, "You aren't own this NFT token");
            total += checkDailyReward(tokenIDs[i]);
            if(checkDailyReward(tokenIDs[i]) > 0){
                lastReward[tokenIDs[i]] = block.timestamp;
            }
        }
        require(total > 0, "There is no claimable reward");
        _mint(msg.sender, total);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(uint256 amount) public virtual {
        require(_balances[msg.sender] >= amount,'insufficient balance!');

        _beforeTokenTransfer(msg.sender, address(0x000000000000000000000000000000000000dEaD), amount);

        _balances[msg.sender] = _balances[msg.sender].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(msg.sender, address(0x000000000000000000000000000000000000dEaD), 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 Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @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 to 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 { }
}

contract TUHY is ERC20 {
    constructor(IHorse nftContract) public ERC20("HORSE TOKEN", "HORSE", nftContract) {
        _mint(msg.sender, 2400000 ether); // Mint Initial supply of 20 Million TUH
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IHorse","name":"nftContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenID","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenOwner","type":"address"}],"name":"airdropClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenID","type":"uint256"},{"indexed":false,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"claimedDailyReward","type":"event"},{"inputs":[],"name":"_Owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_fundAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"excludedA","type":"address"}],"name":"addExcludedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdropEndDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIDs","type":"uint256[]"}],"name":"bulkClaimAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIDs","type":"uint256[]"}],"name":"bulkClaimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"endDate","type":"uint256"}],"name":"changeAirdropEndDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"Taddress","type":"address"}],"name":"changeFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxtx","type":"uint256"}],"name":"changeMaxtx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellLimit","type":"uint256"}],"name":"changeSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"checkDailyReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"claimAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"claimDailyReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dailyReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feeExcludedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"horseContract","outputs":[{"internalType":"contract IHorse","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"isAirdroped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"receivers","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"excludedA","type":"address"}],"name":"removeExcludedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLimiter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityPairAddress","type":"address"}],"name":"setLiquidityPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Tfee","type":"uint256"}],"name":"setTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600760006101000a81548160ff021916908315150217905550671bc16d674ec80000600855636173feb56009556012600c556101f4601255690a968163f0a57b4000006014556a0422ca8b0a00a4250000006016553480156200006857600080fd5b506040516200525938038062005259833981810160405260208110156200008e57600080fd5b81019080805190602001909291905050506040518060400160405280600b81526020017f484f52534520544f4b454e0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f484f5253450000000000000000000000000000000000000000000000000000008152508282600a90805190602001906200012492919062000506565b5081600b90805190602001906200013d92919062000506565b5033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260068190555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555073a25d6e6e02d1fd7a886b83a906c91cde7ed8ddfc601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000293336a01fc3842bd1f071c0000006200029a60201b60201c565b50620005ac565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200033e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b62000352600083836200047860201b60201c565b6200036e816005546200047d60201b620038b61790919060201c565b600581905550620003cc816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200047d60201b620038b61790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600080828401905083811015620004fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200054957805160ff19168380011785556200057a565b828001600101855582156200057a579182015b82811115620005795782518255916020019190600101906200055c565b5b5090506200058991906200058d565b5090565b5b80821115620005a85760008160009055506001016200058e565b5090565b614c9d80620005bc6000396000f3fe608060405234801561001057600080fd5b50600436106102ba5760003560e01c80638230af5a11610182578063b93833c3116100e9578063dd62ed3e116100a2578063f2fde38b1161007c578063f2fde38b14610f11578063f7b2a7be14610f55578063f9271fd314610f73578063fc50eef314610fb7576102ba565b8063dd62ed3e14610e3d578063e30d444014610eb5578063e6ec64ec14610ee3576102ba565b8063b93833c314610d4f578063bab62f3814610d7d578063c964ad4514610d9d578063d7c94efd14610dbd578063dcc2345514610ddb578063dd46706414610e0f576102ba565b8063a646c35d1161013b578063a646c35d14610b83578063a69df4b514610bc7578063a86a226f14610bd1578063a9059cbb14610c89578063a9b54bcd14610ced578063b6c5232414610d31576102ba565b80638230af5a146109e85780638a0b9da614610a1c5780638c95ac8114610a5057806395d89b4114610a6e5780639b1f9e7414610af1578063a457c2d714610b1f576102ba565b8063428e78231161022657806370a08231116101df57806370a0823114610872578063746c8ae1146108ca5780637d1db4a5146108d45780637f5bdec2146108f2578063808a5457146109aa57806380dc0672146109de576102ba565b8063428e78231461073c5780634f91e48c1461076a5780634f922a9e14610788578063571f6eb0146107cc5780635e67fe14146108105780636e63cd961461083e576102ba565b806323b872dd1161027857806323b872dd1461059857806328f97b871461061c578063313ce5671461065e578063315e8c281461067c57806339509351146106aa57806340753a761461070e576102ba565b8062f83cdf146102bf57806306fdde0314610319578063095ea7b31461039c5780630eda72751461040057806318160ddd1461042e5780631e89d5451461044c575b600080fd5b610301600480360360208110156102d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fc1565b60405180821515815260200191505060405180910390f35b610321610fe1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610361578082015181840152602081019050610346565b50505050905090810190601f16801561038e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103e8600480360360408110156103b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611083565b60405180821515815260200191505060405180910390f35b61042c6004803603602081101561041657600080fd5b81019080803590602001909291905050506110a1565b005b610436611151565b6040518082815260200191505060405180910390f35b6105966004803603604081101561046257600080fd5b810190808035906020019064010000000081111561047f57600080fd5b82018360208201111561049157600080fd5b803590602001918460208302840111640100000000831117156104b357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561051357600080fd5b82018360208201111561052557600080fd5b8035906020019184602083028401116401000000008311171561054757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061115b565b005b610604600480360360608110156105ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061127c565b60405180821515815260200191505060405180910390f35b6106486004803603602081101561063257600080fd5b810190808035906020019092919050505061140c565b6040518082815260200191505060405180910390f35b610666611484565b6040518082815260200191505060405180910390f35b6106a86004803603602081101561069257600080fd5b810190808035906020019092919050505061148e565b005b6106f6600480360360408110156106c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611596565b60405180821515815260200191505060405180910390f35b61073a6004803603602081101561072457600080fd5b8101908080359060200190929190505050611649565b005b6107686004803603602081101561075257600080fd5b81019080803590602001909291905050506116fc565b005b6107726117ac565b6040518082815260200191505060405180910390f35b6107ca6004803603602081101561079e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117b2565b005b6107f8600480360360208110156107e257600080fd5b810190808035906020019092919050505061189c565b60405180821515815260200191505060405180910390f35b61083c6004803603602081101561082657600080fd5b81019080803590602001909291905050506118bc565b005b610846611b94565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108b46004803603602081101561088857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bba565b6040518082815260200191505060405180910390f35b6108d2611c02565b005b6108dc611d4f565b6040518082815260200191505060405180910390f35b6109a86004803603602081101561090857600080fd5b810190808035906020019064010000000081111561092557600080fd5b82018360208201111561093757600080fd5b8035906020019184602083028401116401000000008311171561095957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611d55565b005b6109b261208e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109e66120b4565b005b6109f06121f9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a2461221f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a58612245565b6040518082815260200191505060405180910390f35b610a7661224b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ab6578082015181840152602081019050610a9b565b50505050905090810190601f168015610ae35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b1d60048036036020811015610b0757600080fd5b81019080803590602001909291905050506122ed565b005b610b6b60048036036040811015610b3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124e0565b60405180821515815260200191505060405180910390f35b610bc560048036036020811015610b9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125ad565b005b610bcf6126ae565b005b610c8760048036036020811015610be757600080fd5b8101908080359060200190640100000000811115610c0457600080fd5b820183602082011115610c1657600080fd5b80359060200191846020830284011164010000000083111715610c3857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506128ce565b005b610cd560048036036040811015610c9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612bc4565b60405180821515815260200191505060405180910390f35b610d2f60048036036020811015610d0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ca7565b005b610d39612da7565b6040518082815260200191505060405180910390f35b610d7b60048036036020811015610d6557600080fd5b8101908080359060200190929190505050612db1565b005b610d85612e61565b60405180821515815260200191505060405180910390f35b610da5612e74565b60405180821515815260200191505060405180910390f35b610dc5612e87565b6040518082815260200191505060405180910390f35b610de3612e8d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e3b60048036036020811015610e2557600080fd5b8101908080359060200190929190505050612eb3565b005b610e9f60048036036040811015610e5357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613087565b6040518082815260200191505060405180910390f35b610ee160048036036020811015610ecb57600080fd5b810190808035906020019092919050505061310e565b005b610f0f60048036036020811015610ef957600080fd5b81019080803590602001909291905050506133e1565b005b610f5360048036036020811015610f2757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613508565b005b610f5d6136f4565b6040518082815260200191505060405180910390f35b610fb560048036036020811015610f8957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506136fa565b005b610fbf6137e4565b005b60016020528060005260406000206000915054906101000a900460ff1681565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110795780601f1061104e57610100808354040283529160200191611079565b820191906000526020600020905b81548152906001019060200180831161105c57829003601f168201915b5050505050905090565b600061109761109061393e565b8484613946565b6001905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611147576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b8060148190555050565b6000600554905090565b6000825114156111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e6e6f742050726f6363657373204e756c6c205472616e73616374696f6e81525060200191505060405180910390fd5b805182511461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614ad0602c913960400191505060405180910390fd5b60005b82518110156112775761126983828151811061124857fe5b602002602001015183838151811061125c57fe5b6020026020010151612bc4565b508080600101915050611230565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061131f5750600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156113345761132f848484613b3d565b611340565b61133f84848461401c565b5b6114018461134c61393e565b6113fc85604051806060016040528060288152602001614b8e60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113b261393e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461457f9092919063ffffffff16565b613946565b600190509392505050565b60008060065460046000858152602001908152602001600020541161143357600654611448565b60046000848152602001908152602001600020545b905060006114646201518083420361463f90919063ffffffff16565b905061147b6008548261468990919063ffffffff16565b92505050919050565b6000600c54905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b42811161158c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614b6b6023913960400191505060405180910390fd5b8060098190555050565b600061163f6115a361393e565b8461163a85600260006115b461393e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b613946565b6001905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b6116f9338261470f565b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b8060168190555050565b60145481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611858576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60036020528060005260406000206000915054906101000a900460ff1681565b600760009054906101000a900460ff1661193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f204461696c792052657761726473204172652053746f7070656420000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156119c857600080fd5b505afa1580156119dc573d6000803e3d6000fd5b505050506040513d60208110156119f257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f596f75206172656e2774206f776e2074686973204e465420746f6b656e00000081525060200191505060405180910390fd5b6000611a978261140c565b11611b0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5468657265206973206e6f20636c61696d61626c65207265776172640000000081525060200191505060405180910390fd5b611b1c33611b178361140c565b61470f565b4260046000838152602001908152602001600020819055507f77c822939fccc95dc88c14c72b87df80b99db967c009bf8eaaf6f96b2c33cf9c813342604051808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b600760009054906101000a900460ff1615611d2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4461696c792052657761726420416c72656164792052756e6e696e670000000081525060200191505060405180910390fd5b6001600760006101000a81548160ff02191690831515021790555042600681905550565b60165481565b4260095411611dcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f41697264726f7020697320656e6465640000000000000000000000000000000081525060200191505060405180910390fd5b60005b815181101561208a573373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e848481518110611e3957fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611e7557600080fd5b505afa158015611e89573d6000803e3d6000fd5b505050506040513d6020811015611e9f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611f39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f596f75206172656e2774206f776e2074686973204e465420746f6b656e00000081525060200191505060405180910390fd5b60036000838381518110611f4957fe5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614a416025913960400191505060405180910390fd5b611fd633683635c9adc5dea0000061470f565b600160036000848481518110611fe857fe5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd7cb8517fa800f8db8aeaea69e031c83febeb7d06a085e6e911582f070dfa36182828151811061204257fe5b602002602001015133604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a18080600101915050611dcf565b5050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461215a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b600760009054906101000a900460ff166121dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4461696c792052657761726420416c72656164792053746f707065640000000081525060200191505060405180910390fd5b6000600760006101000a81548160ff021916908315150217905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122e35780601f106122b8576101008083540402835291602001916122e3565b820191906000526020600020905b8154815290600101906020018083116122c657829003601f168201915b5050505050905090565b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156123a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e73756666696369656e742062616c616e636521000000000000000000000081525060200191505060405180910390fd5b6123ae3361dead836148d6565b61241981604051806060016040528060228152602001614a66602291396000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461457f9092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612470816005546148db90919063ffffffff16565b60058190555061dead73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b60006125a36124ed61393e565b8461259e85604051806060016040528060258152602001614c43602591396002600061251761393e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461457f9092919063ffffffff16565b613946565b6001905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612653576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612754576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614bff6023913960400191505060405180910390fd5b600d5442116127cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600760009054906101000a900460ff16612950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f204461696c792052657761726473204172652053746f7070656420000000000081525060200191505060405180910390fd5b600080600090505b8251811015612b3f573373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8584815181106129c257fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156129fe57600080fd5b505afa158015612a12573d6000803e3d6000fd5b505050506040513d6020811015612a2857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614612ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f596f75206172656e2774206f776e2074686973204e465420746f6b656e00000081525060200191505060405180910390fd5b612ade838281518110612ad157fe5b602002602001015161140c565b820191506000612b00848381518110612af357fe5b602002602001015161140c565b1115612b32574260046000858481518110612b1757fe5b60200260200101518152602001908152602001600020819055505b8080600101915050612958565b5060008111612bb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5468657265206973206e6f20636c61696d61626c65207265776172640000000081525060200191505060405180910390fd5b612bc0338261470f565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c6e575060016000612c2561393e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c8a57612c85612c7e61393e565b8484613b3d565b612c9d565b612c9c612c9561393e565b848461401c565b5b6001905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d54905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b8060088190555050565b601360009054906101000a900460ff1681565b600760009054906101000a900460ff1681565b60125481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600d81905550600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b4260095411613185576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f41697264726f7020697320656e6465640000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561320f57600080fd5b505afa158015613223573d6000803e3d6000fd5b505050506040513d602081101561323957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146132d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f596f75206172656e2774206f776e2074686973204e465420746f6b656e00000081525060200191505060405180910390fd5b6003600082815260200190815260200160002060009054906101000a900460ff161561334a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614a416025913960400191505060405180910390fd5b61335d33683635c9adc5dea0000061470f565b60016003600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd7cb8517fa800f8db8aeaea69e031c83febeb7d06a085e6e911582f070dfa3618133604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613487576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b6105dc81106134fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f204665652063616e27742065786365656420746f20313525000000000000000081525060200191505060405180910390fd5b8060128190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146135ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613634576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614a886026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146137a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461388a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b601360009054906101000a900460ff1615601360006101000a81548160ff021916908315150217905550565b600080828401905083811015613934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614bdb6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614aae6022913960400191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614bb66025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614a1e6023913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613cf55750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613d5657601654811115613d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614b226028913960400191505060405180910390fd5b5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015613ddd57506000613ddb601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bba565b115b8015613df55750601360009054906101000a900460ff165b15613e72576014548110613e71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f742073656c6c206d6f7265207468616e2073656c6c4c696d69740081525060200191505060405180910390fd5b5b613edd81604051806060016040528060268152602001614afc602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461457f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f70816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156140a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614bb66025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614128576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614a1e6023913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156141d45750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561423557601654811115614234576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614b226028913960400191505060405180910390fd5b5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156142bc575060006142ba601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bba565b115b80156142d45750601360009054906101000a900460ff165b15614351576014548110614350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f742073656c6c206d6f7265207468616e2073656c6c4c696d69740081525060200191505060405180910390fd5b5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156143ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614afc6026913960400191505060405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061444f61444084614925565b846148db90919063ffffffff16565b9050806000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506144a683614925565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050505050565b600083831115829061462c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145f15780820151818401526020810190506145d6565b50505050905090810190601f16801561461e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600061468183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614957565b905092915050565b60008083141561469c5760009050614709565b60008284029050828482816146ad57fe5b0414614704576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614b4a6021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156147b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6147be600083836148d6565b6147d3816005546138b690919063ffffffff16565b60058190555061482a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600061491d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061457f565b905092915050565b60006149506127106149426012548561468990919063ffffffff16565b61463f90919063ffffffff16565b9050919050565b60008083118290614a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156149c85780820151818401526020810190506149ad565b50505050905090810190601f1680156149f55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614a0f57fe5b04905080915050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735468697320746f6b656e20494420616c726561647920636c61696d65642061697264726f7045524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734164647265737320616e6420416d6f756e74206172726179206c656e677468206d7573742062652073616d6545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77456e642044617465206d7573742062652061206675747572652074696d657374616d7045524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b4f6e6c79204f776e65722043616e2043616c6c20546869732046756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a8f21317946ee61fb54439097325ddf7500588c1bca0a0ecef480572b1e9d3ea64736f6c634300060c00330000000000000000000000000e4245ccb9954ead73f8bab13607cd2d86efc84c

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102ba5760003560e01c80638230af5a11610182578063b93833c3116100e9578063dd62ed3e116100a2578063f2fde38b1161007c578063f2fde38b14610f11578063f7b2a7be14610f55578063f9271fd314610f73578063fc50eef314610fb7576102ba565b8063dd62ed3e14610e3d578063e30d444014610eb5578063e6ec64ec14610ee3576102ba565b8063b93833c314610d4f578063bab62f3814610d7d578063c964ad4514610d9d578063d7c94efd14610dbd578063dcc2345514610ddb578063dd46706414610e0f576102ba565b8063a646c35d1161013b578063a646c35d14610b83578063a69df4b514610bc7578063a86a226f14610bd1578063a9059cbb14610c89578063a9b54bcd14610ced578063b6c5232414610d31576102ba565b80638230af5a146109e85780638a0b9da614610a1c5780638c95ac8114610a5057806395d89b4114610a6e5780639b1f9e7414610af1578063a457c2d714610b1f576102ba565b8063428e78231161022657806370a08231116101df57806370a0823114610872578063746c8ae1146108ca5780637d1db4a5146108d45780637f5bdec2146108f2578063808a5457146109aa57806380dc0672146109de576102ba565b8063428e78231461073c5780634f91e48c1461076a5780634f922a9e14610788578063571f6eb0146107cc5780635e67fe14146108105780636e63cd961461083e576102ba565b806323b872dd1161027857806323b872dd1461059857806328f97b871461061c578063313ce5671461065e578063315e8c281461067c57806339509351146106aa57806340753a761461070e576102ba565b8062f83cdf146102bf57806306fdde0314610319578063095ea7b31461039c5780630eda72751461040057806318160ddd1461042e5780631e89d5451461044c575b600080fd5b610301600480360360208110156102d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fc1565b60405180821515815260200191505060405180910390f35b610321610fe1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610361578082015181840152602081019050610346565b50505050905090810190601f16801561038e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103e8600480360360408110156103b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611083565b60405180821515815260200191505060405180910390f35b61042c6004803603602081101561041657600080fd5b81019080803590602001909291905050506110a1565b005b610436611151565b6040518082815260200191505060405180910390f35b6105966004803603604081101561046257600080fd5b810190808035906020019064010000000081111561047f57600080fd5b82018360208201111561049157600080fd5b803590602001918460208302840111640100000000831117156104b357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561051357600080fd5b82018360208201111561052557600080fd5b8035906020019184602083028401116401000000008311171561054757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061115b565b005b610604600480360360608110156105ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061127c565b60405180821515815260200191505060405180910390f35b6106486004803603602081101561063257600080fd5b810190808035906020019092919050505061140c565b6040518082815260200191505060405180910390f35b610666611484565b6040518082815260200191505060405180910390f35b6106a86004803603602081101561069257600080fd5b810190808035906020019092919050505061148e565b005b6106f6600480360360408110156106c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611596565b60405180821515815260200191505060405180910390f35b61073a6004803603602081101561072457600080fd5b8101908080359060200190929190505050611649565b005b6107686004803603602081101561075257600080fd5b81019080803590602001909291905050506116fc565b005b6107726117ac565b6040518082815260200191505060405180910390f35b6107ca6004803603602081101561079e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117b2565b005b6107f8600480360360208110156107e257600080fd5b810190808035906020019092919050505061189c565b60405180821515815260200191505060405180910390f35b61083c6004803603602081101561082657600080fd5b81019080803590602001909291905050506118bc565b005b610846611b94565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108b46004803603602081101561088857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bba565b6040518082815260200191505060405180910390f35b6108d2611c02565b005b6108dc611d4f565b6040518082815260200191505060405180910390f35b6109a86004803603602081101561090857600080fd5b810190808035906020019064010000000081111561092557600080fd5b82018360208201111561093757600080fd5b8035906020019184602083028401116401000000008311171561095957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611d55565b005b6109b261208e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109e66120b4565b005b6109f06121f9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a2461221f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a58612245565b6040518082815260200191505060405180910390f35b610a7661224b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ab6578082015181840152602081019050610a9b565b50505050905090810190601f168015610ae35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b1d60048036036020811015610b0757600080fd5b81019080803590602001909291905050506122ed565b005b610b6b60048036036040811015610b3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124e0565b60405180821515815260200191505060405180910390f35b610bc560048036036020811015610b9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125ad565b005b610bcf6126ae565b005b610c8760048036036020811015610be757600080fd5b8101908080359060200190640100000000811115610c0457600080fd5b820183602082011115610c1657600080fd5b80359060200191846020830284011164010000000083111715610c3857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506128ce565b005b610cd560048036036040811015610c9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612bc4565b60405180821515815260200191505060405180910390f35b610d2f60048036036020811015610d0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ca7565b005b610d39612da7565b6040518082815260200191505060405180910390f35b610d7b60048036036020811015610d6557600080fd5b8101908080359060200190929190505050612db1565b005b610d85612e61565b60405180821515815260200191505060405180910390f35b610da5612e74565b60405180821515815260200191505060405180910390f35b610dc5612e87565b6040518082815260200191505060405180910390f35b610de3612e8d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e3b60048036036020811015610e2557600080fd5b8101908080359060200190929190505050612eb3565b005b610e9f60048036036040811015610e5357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613087565b6040518082815260200191505060405180910390f35b610ee160048036036020811015610ecb57600080fd5b810190808035906020019092919050505061310e565b005b610f0f60048036036020811015610ef957600080fd5b81019080803590602001909291905050506133e1565b005b610f5360048036036020811015610f2757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613508565b005b610f5d6136f4565b6040518082815260200191505060405180910390f35b610fb560048036036020811015610f8957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506136fa565b005b610fbf6137e4565b005b60016020528060005260406000206000915054906101000a900460ff1681565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110795780601f1061104e57610100808354040283529160200191611079565b820191906000526020600020905b81548152906001019060200180831161105c57829003601f168201915b5050505050905090565b600061109761109061393e565b8484613946565b6001905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611147576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b8060148190555050565b6000600554905090565b6000825114156111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f43616e6e6f742050726f6363657373204e756c6c205472616e73616374696f6e81525060200191505060405180910390fd5b805182511461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614ad0602c913960400191505060405180910390fd5b60005b82518110156112775761126983828151811061124857fe5b602002602001015183838151811061125c57fe5b6020026020010151612bc4565b508080600101915050611230565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061131f5750600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156113345761132f848484613b3d565b611340565b61133f84848461401c565b5b6114018461134c61393e565b6113fc85604051806060016040528060288152602001614b8e60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113b261393e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461457f9092919063ffffffff16565b613946565b600190509392505050565b60008060065460046000858152602001908152602001600020541161143357600654611448565b60046000848152602001908152602001600020545b905060006114646201518083420361463f90919063ffffffff16565b905061147b6008548261468990919063ffffffff16565b92505050919050565b6000600c54905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b42811161158c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614b6b6023913960400191505060405180910390fd5b8060098190555050565b600061163f6115a361393e565b8461163a85600260006115b461393e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b613946565b6001905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b6116f9338261470f565b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b8060168190555050565b60145481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611858576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60036020528060005260406000206000915054906101000a900460ff1681565b600760009054906101000a900460ff1661193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f204461696c792052657761726473204172652053746f7070656420000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156119c857600080fd5b505afa1580156119dc573d6000803e3d6000fd5b505050506040513d60208110156119f257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f596f75206172656e2774206f776e2074686973204e465420746f6b656e00000081525060200191505060405180910390fd5b6000611a978261140c565b11611b0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5468657265206973206e6f20636c61696d61626c65207265776172640000000081525060200191505060405180910390fd5b611b1c33611b178361140c565b61470f565b4260046000838152602001908152602001600020819055507f77c822939fccc95dc88c14c72b87df80b99db967c009bf8eaaf6f96b2c33cf9c813342604051808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b600760009054906101000a900460ff1615611d2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4461696c792052657761726420416c72656164792052756e6e696e670000000081525060200191505060405180910390fd5b6001600760006101000a81548160ff02191690831515021790555042600681905550565b60165481565b4260095411611dcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f41697264726f7020697320656e6465640000000000000000000000000000000081525060200191505060405180910390fd5b60005b815181101561208a573373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e848481518110611e3957fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611e7557600080fd5b505afa158015611e89573d6000803e3d6000fd5b505050506040513d6020811015611e9f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611f39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f596f75206172656e2774206f776e2074686973204e465420746f6b656e00000081525060200191505060405180910390fd5b60036000838381518110611f4957fe5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614a416025913960400191505060405180910390fd5b611fd633683635c9adc5dea0000061470f565b600160036000848481518110611fe857fe5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd7cb8517fa800f8db8aeaea69e031c83febeb7d06a085e6e911582f070dfa36182828151811061204257fe5b602002602001015133604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a18080600101915050611dcf565b5050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461215a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b600760009054906101000a900460ff166121dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4461696c792052657761726420416c72656164792053746f707065640000000081525060200191505060405180910390fd5b6000600760006101000a81548160ff021916908315150217905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122e35780601f106122b8576101008083540402835291602001916122e3565b820191906000526020600020905b8154815290600101906020018083116122c657829003601f168201915b5050505050905090565b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156123a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e73756666696369656e742062616c616e636521000000000000000000000081525060200191505060405180910390fd5b6123ae3361dead836148d6565b61241981604051806060016040528060228152602001614a66602291396000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461457f9092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612470816005546148db90919063ffffffff16565b60058190555061dead73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b60006125a36124ed61393e565b8461259e85604051806060016040528060258152602001614c43602591396002600061251761393e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461457f9092919063ffffffff16565b613946565b6001905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612653576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612754576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614bff6023913960400191505060405180910390fd5b600d5442116127cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600760009054906101000a900460ff16612950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f204461696c792052657761726473204172652053746f7070656420000000000081525060200191505060405180910390fd5b600080600090505b8251811015612b3f573373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8584815181106129c257fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156129fe57600080fd5b505afa158015612a12573d6000803e3d6000fd5b505050506040513d6020811015612a2857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614612ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f596f75206172656e2774206f776e2074686973204e465420746f6b656e00000081525060200191505060405180910390fd5b612ade838281518110612ad157fe5b602002602001015161140c565b820191506000612b00848381518110612af357fe5b602002602001015161140c565b1115612b32574260046000858481518110612b1757fe5b60200260200101518152602001908152602001600020819055505b8080600101915050612958565b5060008111612bb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5468657265206973206e6f20636c61696d61626c65207265776172640000000081525060200191505060405180910390fd5b612bc0338261470f565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c6e575060016000612c2561393e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c8a57612c85612c7e61393e565b8484613b3d565b612c9d565b612c9c612c9561393e565b848461401c565b5b6001905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d54905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b8060088190555050565b601360009054906101000a900460ff1681565b600760009054906101000a900460ff1681565b60125481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600d81905550600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b4260095411613185576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f41697264726f7020697320656e6465640000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561320f57600080fd5b505afa158015613223573d6000803e3d6000fd5b505050506040513d602081101561323957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146132d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f596f75206172656e2774206f776e2074686973204e465420746f6b656e00000081525060200191505060405180910390fd5b6003600082815260200190815260200160002060009054906101000a900460ff161561334a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614a416025913960400191505060405180910390fd5b61335d33683635c9adc5dea0000061470f565b60016003600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd7cb8517fa800f8db8aeaea69e031c83febeb7d06a085e6e911582f070dfa3618133604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613487576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b6105dc81106134fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f204665652063616e27742065786365656420746f20313525000000000000000081525060200191505060405180910390fd5b8060128190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146135ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613634576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614a886026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146137a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461388a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614c226021913960400191505060405180910390fd5b601360009054906101000a900460ff1615601360006101000a81548160ff021916908315150217905550565b600080828401905083811015613934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614bdb6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614aae6022913960400191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614bb66025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614a1e6023913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613cf55750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613d5657601654811115613d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614b226028913960400191505060405180910390fd5b5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015613ddd57506000613ddb601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bba565b115b8015613df55750601360009054906101000a900460ff165b15613e72576014548110613e71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f742073656c6c206d6f7265207468616e2073656c6c4c696d69740081525060200191505060405180910390fd5b5b613edd81604051806060016040528060268152602001614afc602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461457f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f70816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156140a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614bb66025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614128576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614a1e6023913960400191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156141d45750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561423557601654811115614234576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614b226028913960400191505060405180910390fd5b5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156142bc575060006142ba601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bba565b115b80156142d45750601360009054906101000a900460ff165b15614351576014548110614350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f742073656c6c206d6f7265207468616e2073656c6c4c696d69740081525060200191505060405180910390fd5b5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156143ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614afc6026913960400191505060405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061444f61444084614925565b846148db90919063ffffffff16565b9050806000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506144a683614925565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050505050565b600083831115829061462c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145f15780820151818401526020810190506145d6565b50505050905090810190601f16801561461e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600061468183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614957565b905092915050565b60008083141561469c5760009050614709565b60008284029050828482816146ad57fe5b0414614704576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614b4a6021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156147b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6147be600083836148d6565b6147d3816005546138b690919063ffffffff16565b60058190555061482a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600061491d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061457f565b905092915050565b60006149506127106149426012548561468990919063ffffffff16565b61463f90919063ffffffff16565b9050919050565b60008083118290614a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156149c85780820151818401526020810190506149ad565b50505050905090810190601f1680156149f55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614a0f57fe5b04905080915050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735468697320746f6b656e20494420616c726561647920636c61696d65642061697264726f7045524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734164647265737320616e6420416d6f756e74206172726179206c656e677468206d7573742062652073616d6545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77456e642044617465206d7573742062652061206675747572652074696d657374616d7045524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b4f6e6c79204f776e65722043616e2043616c6c20546869732046756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a8f21317946ee61fb54439097325ddf7500588c1bca0a0ecef480572b1e9d3ea64736f6c634300060c0033

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

0000000000000000000000000e4245ccb9954ead73f8bab13607cd2d86efc84c

-----Decoded View---------------
Arg [0] : nftContract (address): 0x0E4245ccB9954eAd73F8Bab13607cD2d86eFC84c

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000e4245ccb9954ead73f8bab13607cd2d86efc84c


Deployed Bytecode Sourcemap

35174:207:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16589:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18778:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24334:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21181:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19852:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23016:389;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24977:485;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31039:307;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19705:82;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21515:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25871:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29923:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21295:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17457:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21035:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16722:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31358:472;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17252:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20015:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20725:184;;;:::i;:::-;;17580:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30475:552;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17322:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20569:144;;;:::i;:::-;;17288:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17540;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17048:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18980:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32776:490;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26592:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21846:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22699:305;;;:::i;:::-;;31842:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23618:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21716:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22232:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20921:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17408:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16941:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17357:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17224:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22397:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24036:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30030:433;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20314:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21980:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16979:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21400:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20464:93;;;:::i;:::-;;16589:50;;;;;;;;;;;;;;;;;;;;;;:::o;18778:83::-;18815:13;18848:5;18841:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18778:83;:::o;24334:169::-;24417:4;24434:39;24443:12;:10;:12::i;:::-;24457:7;24466:6;24434:8;:39::i;:::-;24491:4;24484:11;;24334:169;;;;:::o;21181:102::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21265:10:::1;21253:9;:22;;;;21181:102:::0;:::o;19852:100::-;19905:7;19932:12;;19925:19;;19852:100;:::o;23016:389::-;23139:1;23119:9;:16;:21;;23111:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23216:7;:14;23196:9;:16;:34;23188:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23295:9;23290:108;23314:9;:16;23310:1;:20;23290:108;;;23352:34;23361:9;23371:1;23361:12;;;;;;;;;;;;;;23375:7;23383:1;23375:10;;;;;;;;;;;;;;23352:8;:34::i;:::-;;23332:3;;;;;;;23290:108;;;;23016:389;;:::o;24977:485::-;25083:4;25103:18;:29;25122:9;25103:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;25136:18;:26;25155:6;25136:26;;;;;;;;;;;;;;;;;;;;;;;;;25103:59;25100:201;;;25178:44;25196:6;25204:9;25215:6;25178:17;:44::i;:::-;25100:201;;;25253:36;25263:6;25271:9;25282:6;25253:9;:36::i;:::-;25100:201;25311:121;25320:6;25328:12;:10;:12::i;:::-;25342:89;25380:6;25342:89;;;;;;;;;;;;;;;;;:11;:19;25354:6;25342:19;;;;;;;;;;;;;;;:33;25362:12;:10;:12::i;:::-;25342:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;25311:8;:121::i;:::-;25450:4;25443:11;;24977:485;;;;;:::o;31039:307::-;31103:7;31122:16;31164:15;;31142:10;:19;31153:7;31142:19;;;;;;;;;;;;:37;31141:79;;31205:15;;31141:79;;;31183:10;:19;31194:7;31183:19;;;;;;;;;;;;31141:79;31122:98;;31231:18;31252:40;31285:6;31271:8;31253:15;:26;31252:32;;:40;;;;:::i;:::-;31231:61;;31310:28;31325:12;;31310:10;:14;;:28;;;;:::i;:::-;31303:35;;;;31039:307;;;:::o;19705:82::-;19746:4;19770:9;;19763:16;;19705:82;:::o;21515:189::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21607:15:::1;21597:7;:25;21589:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21689:7;21672:14;:24;;;;21515:189:::0;:::o;25871:218::-;25959:4;25976:83;25985:12;:10;:12::i;:::-;25999:7;26008:50;26047:10;26008:11;:25;26020:12;:10;:12::i;:::-;26008:25;;;;;;;;;;;;;;;:34;26034:7;26008:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;25976:8;:83::i;:::-;26077:4;26070:11;;25871:218;;;;:::o;29923:95::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29985:25:::1;29991:10;30003:6;29985:5;:25::i;:::-;29923:95:::0;:::o;21295:93::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21374:6:::1;21359:12;:21;;;;21295:93:::0;:::o;17457:40::-;;;;:::o;21035:134::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21141:20:::1;21125:13;;:36;;;;;;;;;;;;;;;;;;21035:134:::0;:::o;16722:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;31358:472::-;31427:11;;;;;;;;;;;31419:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31522:10;31488:44;;:13;;;;;;;;;;;:21;;;31510:7;31488:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;31480:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31613:1;31585:25;31602:7;31585:16;:25::i;:::-;:29;31577:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31658:44;31664:10;31676:25;31693:7;31676:16;:25::i;:::-;31658:5;:44::i;:::-;31735:15;31713:10;:19;31724:7;31713:19;;;;;;;;;;;:37;;;;31766:56;31785:7;31794:10;31806:15;31766:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31358:472;:::o;17252:29::-;;;;;;;;;;;;;:::o;20015:119::-;20081:7;20108:9;:18;20118:7;20108:18;;;;;;;;;;;;;;;;20101:25;;20015:119;;;:::o;20725:184::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20784:11:::1;;;;;;;;;;;20783:12;20775:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20853:4;20839:11;;:18;;;;;;;;;;;;;;;;;;20886:15;20868;:33;;;;20725:184::o:0;17580:46::-;;;;:::o;30475:552::-;30571:15;30554:14;;:32;30546:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30623:9;30618:402;30642:8;:15;30638:1;:19;30618:402;;;30725:10;30687:48;;:13;;;;;;;;;;;:21;;;30709:8;30718:1;30709:11;;;;;;;;;;;;;;30687:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;30679:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30793:11;:24;30805:8;30814:1;30805:11;;;;;;;;;;;;;;30793:24;;;;;;;;;;;;;;;;;;;;;30792:25;30784:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30874:29;30880:10;30892;30874:5;:29::i;:::-;30945:4;30918:11;:24;30930:8;30939:1;30930:11;;;;;;;;;;;;;;30918:24;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;30969:39;30984:8;30993:1;30984:11;;;;;;;;;;;;;;30997:10;30969:39;;;;;;;;;;;;;;;;;;;;;;;;;;30659:3;;;;;;;30618:402;;;;30475:552;:::o;17322:28::-;;;;;;;;;;;;;:::o;20569:144::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20631:11:::1;;;;;;;;;;;20623:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20700:5;20686:11;;:19;;;;;;;;;;;;;;;;;;20569:144::o:0;17288:27::-;;;;;;;;;;;;;:::o;17540:::-;;;;;;;;;;;;;:::o;17048:42::-;;;;:::o;18980:87::-;19019:13;19052:7;19045:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18980:87;:::o;32776:490::-;32866:6;32841:9;:21;32851:10;32841:21;;;;;;;;;;;;;;;;:31;;32833:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32910:93;32931:10;32951:42;32996:6;32910:20;:93::i;:::-;33040:71;33066:6;33040:71;;;;;;;;;;;;;;;;;:9;:21;33050:10;33040:21;;;;;;;;;;;;;;;;:25;;:71;;;;;:::i;:::-;33016:9;:21;33026:10;33016:21;;;;;;;;;;;;;;;:95;;;;33137:24;33154:6;33137:12;;:16;;:24;;;;:::i;:::-;33122:12;:39;;;;33206:42;33177:81;;33186:10;33177:81;;;33251:6;33177:81;;;;;;;;;;;;;;;;;;32776:490;:::o;26592:269::-;26685:4;26702:129;26711:12;:10;:12::i;:::-;26725:7;26734:96;26773:15;26734:96;;;;;;;;;;;;;;;;;:11;:25;26746:12;:10;:12::i;:::-;26734:25;;;;;;;;;;;;;;;:34;26760:7;26734:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;26702:8;:129::i;:::-;26849:4;26842:11;;26592:269;;;;:::o;21846:122::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21955:5:::1;21923:18;:29;21942:9;21923:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;21846:122:::0;:::o;22699:305::-;22769:10;22751:28;;:14;;;;;;;;;;;:28;;;22743:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22856:9;;22838:15;:27;22830:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22947:14;;;;;;;;;;;22918:44;;22939:6;;;;;;;;;;;22918:44;;;;;;;;;;;;22982:14;;;;;;;;;;;22973:6;;:23;;;;;;;;;;;;;;;;;;22699:305::o;31842:602::-;31921:11;;;;;;;;;;;31913:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31974:13;32003:9;32015:1;32003:13;;31998:343;32022:8;:15;32018:1;:19;31998:343;;;32105:10;32067:48;;:13;;;;;;;;;;;:21;;;32089:8;32098:1;32089:11;;;;;;;;;;;;;;32067:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;32059:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32173:29;32190:8;32199:1;32190:11;;;;;;;;;;;;;;32173:16;:29::i;:::-;32164:38;;;;32252:1;32220:29;32237:8;32246:1;32237:11;;;;;;;;;;;;;;32220:16;:29::i;:::-;:33;32217:113;;;32299:15;32273:10;:23;32284:8;32293:1;32284:11;;;;;;;;;;;;;;32273:23;;;;;;;;;;;:41;;;;32217:113;32039:3;;;;;;;31998:343;;;;32367:1;32359:5;:9;32351:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32412:24;32418:10;32430:5;32412;:24::i;:::-;31842:602;;:::o;23618:355::-;23704:4;23724:18;:29;23743:9;23724:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;23757:18;:32;23776:12;:10;:12::i;:::-;23757:32;;;;;;;;;;;;;;;;;;;;;;;;;23724:65;23721:223;;;23805:50;23823:12;:10;:12::i;:::-;23837:9;23848:6;23805:17;:50::i;:::-;23721:223;;;23886:42;23896:12;:10;:12::i;:::-;23910:9;23921:6;23886:9;:42::i;:::-;23721:223;23961:4;23954:11;;23618:355;;;;:::o;21716:118::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21822:4:::1;21790:18:::0;:29:::1;21809:9;21790:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21716:118:::0;:::o;22232:89::-;22277:7;22304:9;;22297:16;;22232:89;:::o;20921:102::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21008:7:::1;20993:12;:22;;;;20921:102:::0;:::o;17408:23::-;;;;;;;;;;;;;:::o;16941:31::-;;;;;;;;;;;;;:::o;17357:25::-;;;;:::o;17224:21::-;;;;;;;;;;;;;:::o;22397:226::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22478:6:::1;;;;;;;;;;;22461:14;;:23;;;;;;;;;;;;;;;;;;22512:1;22495:6;;:19;;;;;;;;;;;;;;;;;;22555:4;22537:15;:22;22525:9;:34;;;;22612:1;22575:40;;22596:6;;;;;;;;;;;22575:40;;;;;;;;;;;;22397:226:::0;:::o;24036:151::-;24125:7;24152:11;:18;24164:5;24152:18;;;;;;;;;;;;;;;:27;24171:7;24152:27;;;;;;;;;;;;;;;;24145:34;;24036:151;;;;:::o;30030:433::-;30112:15;30095:14;;:32;30087:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30201:10;30167:44;;:13;;;;;;;;;;;:21;;;30189:7;30167:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;30159:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30265:11;:20;30277:7;30265:20;;;;;;;;;;;;;;;;;;;;;30264:21;30256:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30337:29;30343:10;30355;30337:5;:29::i;:::-;30400:4;30377:11;:20;30389:7;30377:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;30420:35;30435:7;30444:10;30420:35;;;;;;;;;;;;;;;;;;;;;;;;;;30030:433;:::o;20314:138::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20387:4:::1;20380;:11;20372:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20440:4;20430:7;:14;;;;20314:138:::0;:::o;21980:244::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22089:1:::1;22069:22;;:8;:22;;;;22061:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22179:8;22150:38;;22171:6;;;;;;;;;;;22150:38;;;;;;;;;;;;22208:8;22199:6;;:17;;;;;;;;;;;;;;;;;;21980:244:::0;:::o;16979:37::-;;;;:::o;21400:103::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21487:8:::1;21472:12;;:23;;;;;;;;;;;;;;;;;;21400:103:::0;:::o;20464:93::-;18644:6;;;;;;;;;;;18630:20;;:10;:20;;;18622:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20538:11:::1;;;;;;;;;;;20537:12;20523:11;;:26;;;;;;;;;;;;;;;;;;20464:93::o:0;4797:181::-;4855:7;4875:9;4891:1;4887;:5;4875:17;;4916:1;4911;:6;;4903:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4969:1;4962:8;;;4797:181;;;;:::o;691:106::-;744:15;779:10;772:17;;691:106;:::o;33704:346::-;33823:1;33806:19;;:5;:19;;;;33798:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33904:1;33885:21;;:7;:21;;;;33877:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33988:6;33958:11;:18;33970:5;33958:18;;;;;;;;;;;;;;;:27;33977:7;33958:27;;;;;;;;;;;;;;;:36;;;;34026:7;34010:32;;34019:5;34010:32;;;34035:6;34010:32;;;;;;;;;;;;;;;;;;33704:346;;;:::o;27351:820::-;27483:1;27465:20;;:6;:20;;;;27457:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27567:1;27546:23;;:9;:23;;;;27538:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27633:6;;;;;;;;;;;27623:16;;:6;:16;;;;:39;;;;;27656:6;;;;;;;;;;;27643:19;;:9;:19;;;;27623:39;27620:132;;;27695:12;;27685:6;:22;;27677:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27620:132;27793:13;;;;;;;;;;;27780:26;;:9;:26;;;:58;;;;;27837:1;27810:24;27820:13;;;;;;;;;;;27810:9;:24::i;:::-;:28;27780:58;:73;;;;;27842:11;;;;;;;;;;;27780:73;27777:166;;;27886:9;;27877:6;:18;27869:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27777:166;27975:71;27997:6;27975:71;;;;;;;;;;;;;;;;;:9;:17;27985:6;27975:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;27955:9;:17;27965:6;27955:17;;;;;;;;;;;;;;;:91;;;;28080:32;28105:6;28080:9;:20;28090:9;28080:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;28057:9;:20;28067:9;28057:20;;;;;;;;;;;;;;;:55;;;;28145:9;28128:35;;28137:6;28128:35;;;28156:6;28128:35;;;;;;;;;;;;;;;;;;27351:820;;;:::o;28183:1069::-;28341:1;28323:20;;:6;:20;;;;28315:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28425:1;28404:23;;:9;:23;;;;28396:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28491:6;;;;;;;;;;;28481:16;;:6;:16;;;;:39;;;;;28514:6;;;;;;;;;;;28501:19;;:9;:19;;;;28481:39;28478:132;;;28553:12;;28543:6;:22;;28535:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28478:132;28639:13;;;;;;;;;;;28626:26;;:9;:26;;;:58;;;;;28683:1;28656:24;28666:13;;;;;;;;;;;28656:9;:24::i;:::-;:28;28626:58;:73;;;;;28688:11;;;;;;;;;;;28626:73;28623:166;;;28732:9;;28723:6;:18;28715:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28623:166;28809:21;28833:9;:17;28843:6;28833:17;;;;;;;;;;;;;;;;28809:41;;28886:6;28869:13;:23;;28861:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28982:6;28966:13;:22;28946:9;:17;28956:6;28946:17;;;;;;;;;;;;;;;:42;;;;28999:23;29025:36;29036:24;29053:6;29036:16;:24::i;:::-;29025:6;:10;;:36;;;;:::i;:::-;28999:62;;29096:15;29072:9;:20;29082:9;29072:20;;;;;;;;;;;;;;;;:39;;;;;;;;;;;29149:24;29166:6;29149:16;:24::i;:::-;29122:9;:23;29132:12;;;;;;;;;;;29122:23;;;;;;;;;;;;;;;;:51;;;;;;;;;;;29217:9;29200:44;;29209:6;29200:44;;;29228:15;29200:44;;;;;;;;;;;;;;;;;;28183:1069;;;;;:::o;5700:192::-;5786:7;5819:1;5814;:6;;5822:12;5806:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5846:9;5862:1;5858;:5;5846:17;;5883:1;5876:8;;;5700:192;;;;;:::o;7098:132::-;7156:7;7183:39;7187:1;7190;7183:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7176:46;;7098:132;;;;:::o;6151:471::-;6209:7;6459:1;6454;:6;6450:47;;;6484:1;6477:8;;;;6450:47;6509:9;6525:1;6521;:5;6509:17;;6554:1;6549;6545;:5;;;;;;:10;6537:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6613:1;6606:8;;;6151:471;;;;;:::o;29533:378::-;29636:1;29617:21;;:7;:21;;;;29609:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29687:49;29716:1;29720:7;29729:6;29687:20;:49::i;:::-;29764:24;29781:6;29764:12;;:16;;:24;;;;:::i;:::-;29749:12;:39;;;;29820:30;29843:6;29820:9;:18;29830:7;29820:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;29799:9;:18;29809:7;29799:18;;;;;;;;;;;;;;;:51;;;;29887:7;29866:37;;29883:1;29866:37;;;29896:6;29866:37;;;;;;;;;;;;;;;;;;29533:378;;:::o;35075:92::-;;;;:::o;5261:136::-;5319:7;5346:43;5350:1;5353;5346:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5339:50;;5261:136;;;;:::o;20146:156::-;20212:7;20239:55;20278:5;20239:20;20251:7;;20239;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;20232:62;;20146:156;;;:::o;7726:278::-;7812:7;7844:1;7840;:5;7847:12;7832:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7871:9;7887:1;7883;:5;;;;;;7871:17;;7995:1;7988:8;;;7726:278;;;;;:::o

Swarm Source

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