ETH Price: $3,898.08 (+0.36%)

Token

ERC-20: SafeCat (SafeCat)
 

Overview

Max Total Supply

956,098,286.82108138 SafeCat

Holders

1,045

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
149,913.75215595 SafeCat

Value
$0.00
0x876fd1a01b7ce56f85bfd178e0a52ee5ec9d2ffe
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:
SafeCat

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-05-30
*/

//                                                                                                                       
//     d888888o.            .8.          8 88888888888  8 88888888888       ,o888888o.           .8.    8888888 8888888888 
//   .`8888:' `88.         .888.         8 8888         8 8888             8888     `88.        .888.         8 8888       
//   8.`8888.   Y8        :88888.        8 8888         8 8888          ,8 8888       `8.      :88888.        8 8888       
//   `8.`8888.           . `88888.       8 8888         8 8888          88 8888               . `88888.       8 8888       
//    `8.`8888.         .8. `88888.      8 8888888888   8 8888888888    88 8888              .8. `88888.      8 8888       
//     `8.`8888.       .8`8. `88888.     8 8888         8 8888          88 8888             .8`8. `88888.     8 8888       
//      `8.`8888.     .8' `8. `88888.    8 8888         8 8888          88 8888            .8' `8. `88888.    8 8888       
//  8b   `8.`8888.   .8'   `8. `88888.   8 8888         8 8888          `8 8888       .8' .8'   `8. `88888.   8 8888       
//  `8b.  ;8.`8888  .888888888. `88888.  8 8888         8 8888             8888     ,88' .888888888. `88888.  8 8888       
//   `Y8888P8,88P' .8'       `8. `88888. 8 8888         8 88888888888       `8888888P'  .8'       `8. `88888. 8 8888       
//


// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;


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 BEP20 standard as defined in the EIP.
 */
interface IBEP20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

/**
 * @dev 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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

contract SafeCat is Context, IBEP20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    //added now
    mapping (address => bool) private bot; 
    
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    
    string  private constant _NAME = 'SafeCat';
    string  private constant _SYMBOL = 'SafeCat';
    uint8   private constant _DECIMALS = 8;
   
    uint256 private constant _MAX = ~uint256(0);
    uint256 private constant _DECIMALFACTOR = 10 ** uint256(_DECIMALS);
    uint256 private constant _GRANULARITY = 100;
    
    uint256 private _tTotal = 1000000000 * _DECIMALFACTOR;
    uint256 private _rTotal = (_MAX - (_MAX % _tTotal));
    
    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;
    
    uint256 private constant     _TAX_FEE = 100;
    uint256 private constant    _BURN_FEE = 100;
    uint256 private _MAX_TX_SIZE = 100000 * _DECIMALFACTOR;
    
    bool public tradingEnabled = false;
    address private LiquidityAddress;
    uint256 private _MAX_WT_SIZE = 200000 * _DECIMALFACTOR;
    
    uint256 public _marketingFee = 100;
    address public marketingWallet = 0x610a81aea4C42fCd24A8CdF7174327066e6045A5;
    uint256 private _previousmarketingFee = _marketingFee;
    
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _NAME;
    }

    function symbol() public view returns (string memory) {
        return _SYMBOL;
    }

    function decimals() public view returns (uint8) {
        return _DECIMALS;
    }

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

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero"));
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function totalBurn() public view returns (uint256) {
        return _tBurnTotal;
    }

    //added this
    function setBot(address blist) external onlyOwner returns (bool){
        bot[blist] = !bot[blist];
        return bot[blist];
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(account != 0x73feaa1eE314F8c655E354234017bE2193C9E24E, 'We can not exclude Pancake router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(sender != owner() && recipient != owner()){
            require(amount <= _MAX_TX_SIZE, "Transfer amount exceeds the maxTxAmount.");
            require(!bot[sender], "Play fair");
            require(!bot[recipient], "Play fair");
            if (recipient != LiquidityAddress) {
                 require(balanceOf(recipient) + amount <= _MAX_WT_SIZE, "Transfer amount exceeds the maxWtAmount.");
            }
        }
        
        if (sender != owner()) {
            require(tradingEnabled, "Trading is not enabled yet");
        }
        
        _previousmarketingFee = _marketingFee;
        uint256 marketingAmt = amount.mul(_marketingFee).div(_GRANULARITY).div(100);
            
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount.sub(marketingAmt));
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount.sub(marketingAmt));
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount.sub(marketingAmt));
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount.sub(marketingAmt));
        } else {
            _transferStandard(sender, recipient, amount.sub(marketingAmt));
        }
        
        //temporarily remove marketing fees
        _marketingFee = 0;
        _transferStandard(sender, marketingWallet, marketingAmt);
        _marketingFee = _previousmarketingFee;
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);       
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 rBurn, uint256 tFee, uint256 tBurn) private {
        _rTotal = _rTotal.sub(rFee).sub(rBurn);
        _tFeeTotal = _tFeeTotal.add(tFee);
        _tBurnTotal = _tBurnTotal.add(tBurn);
        _tTotal = _tTotal.sub(tBurn);
    }
    
    function setMaxTxSize(uint256 amount) external onlyOwner() {
        _MAX_TX_SIZE = amount * _DECIMALFACTOR;
    }

    function setmarketingWallet(address newWallet) external onlyOwner() {
        marketingWallet = newWallet;
    }
    
    function setmarketingfee(uint256 amount) external onlyOwner() {
        _marketingFee = amount;
    }
    
    function setMaxWtSize(uint256 amount) external onlyOwner() {
        _MAX_WT_SIZE = amount * _DECIMALFACTOR;
    }

    function setLiquidityAddress(address amount) external onlyOwner() {
        LiquidityAddress = amount;
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getTValues(tAmount, _TAX_FEE, _BURN_FEE);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tBurn, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tBurn);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 burnFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = ((tAmount.mul(taxFee)).div(_GRANULARITY)).div(100);
        uint256 tBurn = ((tAmount.mul(burnFee)).div(_GRANULARITY)).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tBurn);
        return (tTransferAmount, tFee, tBurn);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tBurn, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rBurn);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _getTaxFee() public view returns(uint256) {
        return _TAX_FEE;
    }

    function enableTrading(bool _tradingEnabled) external onlyOwner() {
        tradingEnabled = _tradingEnabled;
    }    
        
    function _getMaxTxSize() public view returns(uint256) {
        return _MAX_TX_SIZE;
    }
    
    function _getMaxWtSize() public view returns(uint256) {
        return _MAX_WT_SIZE;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_getMaxTxSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getMaxWtSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingEnabled","type":"bool"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"blist","type":"address"}],"name":"setBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"amount","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWtSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setmarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setmarketingfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600860ff16600a0a633b9aca0002600755600754600019816200002357fe5b0660001903600855600860ff16600a0a620186a002600b556000600c60006101000a81548160ff021916908315150217905550600860ff16600a0a62030d4002600d556064600e5573610a81aea4c42fcd24a8cdf7174327066e6045a5600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e54601055348015620000d357600080fd5b506000620000e66200025660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600854600160006200019b6200025660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001e96200025660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a36200025e565b600033905090565b61457f806200026e6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80634ada218b11610125578063a9059cbb116100ad578063dd62ed3e1161007c578063dd62ed3e14610991578063f275f64b14610a09578063f2cc0c1814610a39578063f2fde38b14610a7d578063f84354f114610ac157610211565b8063a9059cbb14610877578063c1466e98146108db578063c68bb7ba14610909578063cba0e9961461093757610211565b8063715018a6116100f4578063715018a61461071e57806375f0a874146107285780638da5cb5b1461075c57806395d89b4114610790578063a457c2d71461081357610211565b80634ada218b14610608578063525fa81f146106285780636b5caec41461066c57806370a08231146106c657610211565b80632e80f988116101a8578063395093511161017757806339509351146104ec5780633bd5d173146105505780633c9f861d1461057e5780634549b0391461059c578063469763d5146105ea57610211565b80632e80f988146104615780632fbff0301461047f578063313ce5671461049d57806337ebbfae146104be57610211565b806322461173116101e4578063224611731461033957806322976e0d1461037d57806323b872dd1461039b5780632d8381191461041f57610211565b806306fdde0314610216578063095ea7b31461029957806313114a9d146102fd57806318160ddd1461031b575b600080fd5b61021e610b05565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082015181840152602081019050610243565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e5600480360360408110156102af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b42565b60405180821515815260200191505060405180910390f35b610305610b60565b6040518082815260200191505060405180910390f35b610323610b6a565b6040518082815260200191505060405180910390f35b61037b6004803603602081101561034f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b74565b005b610385610c80565b6040518082815260200191505060405180910390f35b610407600480360360608110156103b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c86565b60405180821515815260200191505060405180910390f35b61044b6004803603602081101561043557600080fd5b8101908080359060200190929190505050610d5f565b6040518082815260200191505060405180910390f35b610469610de3565b6040518082815260200191505060405180910390f35b610487610ded565b6040518082815260200191505060405180910390f35b6104a5610df6565b604051808260ff16815260200191505060405180910390f35b6104ea600480360360208110156104d457600080fd5b8101908080359060200190929190505050610dff565b005b6105386004803603604081101561050257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eda565b60405180821515815260200191505060405180910390f35b61057c6004803603602081101561056657600080fd5b8101908080359060200190929190505050610f8d565b005b61058661111e565b6040518082815260200191505060405180910390f35b6105d4600480360360408110156105b257600080fd5b8101908080359060200190929190803515159060200190929190505050611128565b6040518082815260200191505060405180910390f35b6105f26111df565b6040518082815260200191505060405180910390f35b6106106111e9565b60405180821515815260200191505060405180910390f35b61066a6004803603602081101561063e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111fc565b005b6106ae6004803603602081101561068257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611308565b60405180821515815260200191505060405180910390f35b610708600480360360208110156106dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114ca565b6040518082815260200191505060405180910390f35b6107266115b5565b005b61073061173b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610764611761565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61079861178a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107d85780820151818401526020810190506107bd565b50505050905090810190601f1680156108055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61085f6004803603604081101561082957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117c7565b60405180821515815260200191505060405180910390f35b6108c36004803603604081101561088d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611894565b60405180821515815260200191505060405180910390f35b610907600480360360208110156108f157600080fd5b81019080803590602001909291905050506118b2565b005b6109356004803603602081101561091f57600080fd5b8101908080359060200190929190505050611984565b005b6109796004803603602081101561094d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a5f565b60405180821515815260200191505060405180910390f35b6109f3600480360360408110156109a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ab5565b6040518082815260200191505060405180910390f35b610a3760048036036020811015610a1f57600080fd5b81019080803515159060200190929190505050611b3c565b005b610a7b60048036036020811015610a4f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c21565b005b610abf60048036036020811015610a9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061206d565b005b610b0360048036036020811015610ad757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612278565b005b60606040518060400160405280600781526020017f5361666543617400000000000000000000000000000000000000000000000000815250905090565b6000610b56610b4f612602565b848461260a565b6001905092915050565b6000600954905090565b6000600754905090565b610b7c612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b6000610c93848484612801565b610d5484610c9f612602565b610d4f856040518060600160405280602881526020016143ae60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d05612602565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a9092919063ffffffff16565b61260a565b600190509392505050565b6000600854821115610dbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061435e602a913960400191505060405180910390fd5b6000610dc66131ca565b9050610ddb81846131f590919063ffffffff16565b915050919050565b6000600b54905090565b60006064905090565b60006008905090565b610e07612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860ff16600a0a8102600d8190555050565b6000610f83610ee7612602565b84610f7e8560036000610ef8612602565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b61260a565b6001905092915050565b6000610f97612602565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806144fc602c913960400191505060405180910390fd5b6000611047836132c7565b505050505090506110a081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110f88160085461332c90919063ffffffff16565b6008819055506111138360095461323f90919063ffffffff16565b600981905550505050565b6000600a54905090565b60006007548311156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816111c25760006111b2846132c7565b50505050509050809150506111d9565b60006111cd846132c7565b50505050915050809150505b92915050565b6000600d54905090565b600c60009054906101000a900460ff1681565b611204612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611312612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561156557600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506115b0565b6115ad600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d5f565b90505b919050565b6115bd612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f5361666543617400000000000000000000000000000000000000000000000000815250905090565b600061188a6117d4612602565b846118858560405180606001604052806025815260200161449360259139600360006117fe612602565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a9092919063ffffffff16565b61260a565b6001905092915050565b60006118a86118a1612602565b8484612801565b6001905092915050565b6118ba612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461197a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e8190555050565b61198c612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860ff16600a0a8102600b8190555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b44612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b611c29612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806144da6022913960400191505060405180910390fd5b7373feaa1ee314f8c655e354234017be2193c9e24e73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806144b86022913960400191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611faf57611f6b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d5f565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612075612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612135576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806143886026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612280612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6006805490508110156125fe578173ffffffffffffffffffffffffffffffffffffffff166006828154811061243357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125f15760066001600680549050038154811061248f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600682815481106124c757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060068054806125b757fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556125fe565b8080600101915050612402565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061433a6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612716576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145286022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612887576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143156025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561290d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806144486023913960400191505060405180910390fd5b60008111612966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061441f6029913960400191505060405180910390fd5b61296e611761565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129dc57506129ac611761565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c7857600b54811115612a3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806143d66028913960400191505060405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612afc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f506c61792066616972000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bbc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f506c61792066616972000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c7757600d5481612c1e846114ca565b011115612c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061446b6028913960400191505060405180910390fd5b5b5b612c80611761565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d3557600c60009054906101000a900460ff16612d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726164696e67206973206e6f7420656e61626c65642079657400000000000081525060200191505060405180910390fd5b5b600e546010819055506000612d7b6064612d6d6064612d5f600e548761337690919063ffffffff16565b6131f590919063ffffffff16565b6131f590919063ffffffff16565b9050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e205750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e4757612e428484612e3d848661332c90919063ffffffff16565b6133fc565b6130c6565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612eea5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f1157612f0c8484612f07848661332c90919063ffffffff16565b61367a565b6130c5565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fb55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fdc57612fd78484612fd2848661332c90919063ffffffff16565b6138f8565b6130c4565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561307e5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130a5576130a0848461309b848661332c90919063ffffffff16565b613ae1565b6130c3565b6130c284846130bd848661332c90919063ffffffff16565b6138f8565b5b5b5b5b6000600e819055506130fb84600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836138f8565b601054600e8190555050505050565b60008383111582906131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561317c578082015181840152602081019050613161565b50505050905090810190601f1680156131a95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006131d7613df4565b915091506131ee81836131f590919063ffffffff16565b9250505090565b600061323783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614085565b905092915050565b6000808284019050838110156132bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006132e18a60648061414b565b92509250925060006132f16131ca565b905060008060006133048e878787614207565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061336e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061310a565b905092915050565b60008083141561338957600090506133f6565b600082840290508284828161339a57fe5b04146133f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806143fe6021913960400191505060405180910390fd5b809150505b92915050565b60006134066131ca565b905060008060008060008061341a886132c7565b955095509550955095509550600061343b888361337690919063ffffffff16565b905061348f89600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061352487600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135b986600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061360885828585614290565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006136846131ca565b9050600080600080600080613698886132c7565b95509550955095509550955060006136b9888361337690919063ffffffff16565b905061370d87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137a284600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061383786600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061388685828585614290565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006139026131ca565b9050600080600080600080613916886132c7565b9550955095509550955095506000613937888361337690919063ffffffff16565b905061398b87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2086600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a6f85828585614290565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000613aeb6131ca565b9050600080600080600080613aff886132c7565b9550955095509550955095506000613b20888361337690919063ffffffff16565b9050613b7489600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0987600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9e84600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d3386600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8285828585614290565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b600080600060085490506000600754905060005b60068054905081101561404857826001600060068481548110613e2757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613f0e5750816002600060068481548110613ea657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613f255760085460075494509450505050614081565b613fae6001600060068481548110613f3957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461332c90919063ffffffff16565b92506140396002600060068481548110613fc457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361332c90919063ffffffff16565b91508080600101915050613e08565b506140606007546008546131f590919063ffffffff16565b82101561407857600854600754935093505050614081565b81819350935050505b9091565b60008083118290614131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140f65780820151818401526020810190506140db565b50505050905090810190601f1680156141235780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161413d57fe5b049050809150509392505050565b60008060008061418a606461417c606461416e8a8c61337690919063ffffffff16565b6131f590919063ffffffff16565b6131f590919063ffffffff16565b905060006141c760646141b960646141ab8a8d61337690919063ffffffff16565b6131f590919063ffffffff16565b6131f590919063ffffffff16565b905060006141f0826141e2858c61332c90919063ffffffff16565b61332c90919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614220858961337690919063ffffffff16565b90506000614237868961337690919063ffffffff16565b9050600061424e878961337690919063ffffffff16565b9050600061427782614269858761332c90919063ffffffff16565b61332c90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6142b7836142a98660085461332c90919063ffffffff16565b61332c90919063ffffffff16565b6008819055506142d28260095461323f90919063ffffffff16565b6009819055506142ed81600a5461323f90919063ffffffff16565b600a819055506143088160075461332c90919063ffffffff16565b6007819055505050505056fe42455032303a207472616e736665722066726f6d20746865207a65726f206164647265737342455032303a20617070726f76652066726f6d20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737342455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f42455032303a207472616e7366657220746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785774416d6f756e742e42455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f57652063616e206e6f74206578636c7564652050616e63616b6520726f757465722e57652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e42455032303a20617070726f766520746f20746865207a65726f2061646472657373a2646970667358221220b76423d6507a3d1cb6e9988fec3e081709a3bad9863d576f4e54a5c9e620f4fe64736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102115760003560e01c80634ada218b11610125578063a9059cbb116100ad578063dd62ed3e1161007c578063dd62ed3e14610991578063f275f64b14610a09578063f2cc0c1814610a39578063f2fde38b14610a7d578063f84354f114610ac157610211565b8063a9059cbb14610877578063c1466e98146108db578063c68bb7ba14610909578063cba0e9961461093757610211565b8063715018a6116100f4578063715018a61461071e57806375f0a874146107285780638da5cb5b1461075c57806395d89b4114610790578063a457c2d71461081357610211565b80634ada218b14610608578063525fa81f146106285780636b5caec41461066c57806370a08231146106c657610211565b80632e80f988116101a8578063395093511161017757806339509351146104ec5780633bd5d173146105505780633c9f861d1461057e5780634549b0391461059c578063469763d5146105ea57610211565b80632e80f988146104615780632fbff0301461047f578063313ce5671461049d57806337ebbfae146104be57610211565b806322461173116101e4578063224611731461033957806322976e0d1461037d57806323b872dd1461039b5780632d8381191461041f57610211565b806306fdde0314610216578063095ea7b31461029957806313114a9d146102fd57806318160ddd1461031b575b600080fd5b61021e610b05565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082015181840152602081019050610243565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e5600480360360408110156102af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b42565b60405180821515815260200191505060405180910390f35b610305610b60565b6040518082815260200191505060405180910390f35b610323610b6a565b6040518082815260200191505060405180910390f35b61037b6004803603602081101561034f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b74565b005b610385610c80565b6040518082815260200191505060405180910390f35b610407600480360360608110156103b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c86565b60405180821515815260200191505060405180910390f35b61044b6004803603602081101561043557600080fd5b8101908080359060200190929190505050610d5f565b6040518082815260200191505060405180910390f35b610469610de3565b6040518082815260200191505060405180910390f35b610487610ded565b6040518082815260200191505060405180910390f35b6104a5610df6565b604051808260ff16815260200191505060405180910390f35b6104ea600480360360208110156104d457600080fd5b8101908080359060200190929190505050610dff565b005b6105386004803603604081101561050257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eda565b60405180821515815260200191505060405180910390f35b61057c6004803603602081101561056657600080fd5b8101908080359060200190929190505050610f8d565b005b61058661111e565b6040518082815260200191505060405180910390f35b6105d4600480360360408110156105b257600080fd5b8101908080359060200190929190803515159060200190929190505050611128565b6040518082815260200191505060405180910390f35b6105f26111df565b6040518082815260200191505060405180910390f35b6106106111e9565b60405180821515815260200191505060405180910390f35b61066a6004803603602081101561063e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111fc565b005b6106ae6004803603602081101561068257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611308565b60405180821515815260200191505060405180910390f35b610708600480360360208110156106dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114ca565b6040518082815260200191505060405180910390f35b6107266115b5565b005b61073061173b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610764611761565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61079861178a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107d85780820151818401526020810190506107bd565b50505050905090810190601f1680156108055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61085f6004803603604081101561082957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117c7565b60405180821515815260200191505060405180910390f35b6108c36004803603604081101561088d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611894565b60405180821515815260200191505060405180910390f35b610907600480360360208110156108f157600080fd5b81019080803590602001909291905050506118b2565b005b6109356004803603602081101561091f57600080fd5b8101908080359060200190929190505050611984565b005b6109796004803603602081101561094d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a5f565b60405180821515815260200191505060405180910390f35b6109f3600480360360408110156109a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ab5565b6040518082815260200191505060405180910390f35b610a3760048036036020811015610a1f57600080fd5b81019080803515159060200190929190505050611b3c565b005b610a7b60048036036020811015610a4f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c21565b005b610abf60048036036020811015610a9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061206d565b005b610b0360048036036020811015610ad757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612278565b005b60606040518060400160405280600781526020017f5361666543617400000000000000000000000000000000000000000000000000815250905090565b6000610b56610b4f612602565b848461260a565b6001905092915050565b6000600954905090565b6000600754905090565b610b7c612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b6000610c93848484612801565b610d5484610c9f612602565b610d4f856040518060600160405280602881526020016143ae60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d05612602565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a9092919063ffffffff16565b61260a565b600190509392505050565b6000600854821115610dbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061435e602a913960400191505060405180910390fd5b6000610dc66131ca565b9050610ddb81846131f590919063ffffffff16565b915050919050565b6000600b54905090565b60006064905090565b60006008905090565b610e07612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860ff16600a0a8102600d8190555050565b6000610f83610ee7612602565b84610f7e8560036000610ef8612602565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b61260a565b6001905092915050565b6000610f97612602565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806144fc602c913960400191505060405180910390fd5b6000611047836132c7565b505050505090506110a081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110f88160085461332c90919063ffffffff16565b6008819055506111138360095461323f90919063ffffffff16565b600981905550505050565b6000600a54905090565b60006007548311156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816111c25760006111b2846132c7565b50505050509050809150506111d9565b60006111cd846132c7565b50505050915050809150505b92915050565b6000600d54905090565b600c60009054906101000a900460ff1681565b611204612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611312612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561156557600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506115b0565b6115ad600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d5f565b90505b919050565b6115bd612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f5361666543617400000000000000000000000000000000000000000000000000815250905090565b600061188a6117d4612602565b846118858560405180606001604052806025815260200161449360259139600360006117fe612602565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a9092919063ffffffff16565b61260a565b6001905092915050565b60006118a86118a1612602565b8484612801565b6001905092915050565b6118ba612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461197a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e8190555050565b61198c612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860ff16600a0a8102600b8190555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b44612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b611c29612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806144da6022913960400191505060405180910390fd5b7373feaa1ee314f8c655e354234017be2193c9e24e73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806144b86022913960400191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611faf57611f6b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d5f565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612075612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612135576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806143886026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612280612602565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6006805490508110156125fe578173ffffffffffffffffffffffffffffffffffffffff166006828154811061243357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125f15760066001600680549050038154811061248f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600682815481106124c757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060068054806125b757fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556125fe565b8080600101915050612402565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061433a6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612716576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145286022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612887576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143156025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561290d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806144486023913960400191505060405180910390fd5b60008111612966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061441f6029913960400191505060405180910390fd5b61296e611761565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129dc57506129ac611761565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c7857600b54811115612a3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806143d66028913960400191505060405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612afc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f506c61792066616972000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bbc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f506c61792066616972000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c7757600d5481612c1e846114ca565b011115612c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061446b6028913960400191505060405180910390fd5b5b5b612c80611761565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d3557600c60009054906101000a900460ff16612d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726164696e67206973206e6f7420656e61626c65642079657400000000000081525060200191505060405180910390fd5b5b600e546010819055506000612d7b6064612d6d6064612d5f600e548761337690919063ffffffff16565b6131f590919063ffffffff16565b6131f590919063ffffffff16565b9050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e205750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e4757612e428484612e3d848661332c90919063ffffffff16565b6133fc565b6130c6565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612eea5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f1157612f0c8484612f07848661332c90919063ffffffff16565b61367a565b6130c5565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fb55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fdc57612fd78484612fd2848661332c90919063ffffffff16565b6138f8565b6130c4565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561307e5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130a5576130a0848461309b848661332c90919063ffffffff16565b613ae1565b6130c3565b6130c284846130bd848661332c90919063ffffffff16565b6138f8565b5b5b5b5b6000600e819055506130fb84600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836138f8565b601054600e8190555050505050565b60008383111582906131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561317c578082015181840152602081019050613161565b50505050905090810190601f1680156131a95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006131d7613df4565b915091506131ee81836131f590919063ffffffff16565b9250505090565b600061323783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614085565b905092915050565b6000808284019050838110156132bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006132e18a60648061414b565b92509250925060006132f16131ca565b905060008060006133048e878787614207565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061336e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061310a565b905092915050565b60008083141561338957600090506133f6565b600082840290508284828161339a57fe5b04146133f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806143fe6021913960400191505060405180910390fd5b809150505b92915050565b60006134066131ca565b905060008060008060008061341a886132c7565b955095509550955095509550600061343b888361337690919063ffffffff16565b905061348f89600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061352487600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135b986600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061360885828585614290565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006136846131ca565b9050600080600080600080613698886132c7565b95509550955095509550955060006136b9888361337690919063ffffffff16565b905061370d87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137a284600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061383786600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061388685828585614290565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006139026131ca565b9050600080600080600080613916886132c7565b9550955095509550955095506000613937888361337690919063ffffffff16565b905061398b87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2086600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a6f85828585614290565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000613aeb6131ca565b9050600080600080600080613aff886132c7565b9550955095509550955095506000613b20888361337690919063ffffffff16565b9050613b7489600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0987600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332c90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9e84600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d3386600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323f90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8285828585614290565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b600080600060085490506000600754905060005b60068054905081101561404857826001600060068481548110613e2757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613f0e5750816002600060068481548110613ea657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613f255760085460075494509450505050614081565b613fae6001600060068481548110613f3957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461332c90919063ffffffff16565b92506140396002600060068481548110613fc457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361332c90919063ffffffff16565b91508080600101915050613e08565b506140606007546008546131f590919063ffffffff16565b82101561407857600854600754935093505050614081565b81819350935050505b9091565b60008083118290614131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140f65780820151818401526020810190506140db565b50505050905090810190601f1680156141235780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161413d57fe5b049050809150509392505050565b60008060008061418a606461417c606461416e8a8c61337690919063ffffffff16565b6131f590919063ffffffff16565b6131f590919063ffffffff16565b905060006141c760646141b960646141ab8a8d61337690919063ffffffff16565b6131f590919063ffffffff16565b6131f590919063ffffffff16565b905060006141f0826141e2858c61332c90919063ffffffff16565b61332c90919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614220858961337690919063ffffffff16565b90506000614237868961337690919063ffffffff16565b9050600061424e878961337690919063ffffffff16565b9050600061427782614269858761332c90919063ffffffff16565b61332c90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6142b7836142a98660085461332c90919063ffffffff16565b61332c90919063ffffffff16565b6008819055506142d28260095461323f90919063ffffffff16565b6009819055506142ed81600a5461323f90919063ffffffff16565b600a819055506143088160075461332c90919063ffffffff16565b6007819055505050505056fe42455032303a207472616e736665722066726f6d20746865207a65726f206164647265737342455032303a20617070726f76652066726f6d20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737342455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f42455032303a207472616e7366657220746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785774416d6f756e742e42455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f57652063616e206e6f74206578636c7564652050616e63616b6520726f757465722e57652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e42455032303a20617070726f766520746f20746865207a65726f2061646472657373a2646970667358221220b76423d6507a3d1cb6e9988fec3e081709a3bad9863d576f4e54a5c9e620f4fe64736f6c634300060c0033

Deployed Bytecode Sourcemap

18209:14409:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19840:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20752:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21863:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20117:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29662:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19512:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20921:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23048:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32417:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32187:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20026:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29903:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21242:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22219:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21962:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22604:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32521:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19365:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30027:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22076:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20220:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17655:148;;;:::i;:::-;;19553:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17013:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19931:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21468:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20426:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29788:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29538:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21745:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20601:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32280:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23309:554;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17958:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23871:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19840:83;19877:13;19910:5;;;;;;;;;;;;;;;;;19903:12;;19840:83;:::o;20752:161::-;20827:4;20844:39;20853:12;:10;:12::i;:::-;20867:7;20876:6;20844:8;:39::i;:::-;20901:4;20894:11;;20752:161;;;;:::o;21863:87::-;21905:7;21932:10;;21925:17;;21863:87;:::o;20117:95::-;20170:7;20197;;20190:14;;20117:95;:::o;29662:114::-;17235:12;:10;:12::i;:::-;17225:22;;:6;;;;;;;;;;:22;;;17217:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29759:9:::1;29741:15;;:27;;;;;;;;;;;;;;;;;;29662:114:::0;:::o;19512:34::-;;;;:::o;20921:313::-;21019:4;21036:36;21046:6;21054:9;21065:6;21036:9;:36::i;:::-;21083:121;21092:6;21100:12;:10;:12::i;:::-;21114:89;21152:6;21114:89;;;;;;;;;;;;;;;;;:11;:19;21126:6;21114:19;;;;;;;;;;;;;;;:33;21134:12;:10;:12::i;:::-;21114:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21083:8;:121::i;:::-;21222:4;21215:11;;20921:313;;;;;:::o;23048:253::-;23114:7;23153;;23142;:18;;23134:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23218:19;23241:10;:8;:10::i;:::-;23218:33;;23269:24;23281:11;23269:7;:11;;:24;;;;:::i;:::-;23262:31;;;23048:253;;;:::o;32417:92::-;32462:7;32489:12;;32482:19;;32417:92;:::o;32187:85::-;32229:7;19238:3;32249:15;;32187:85;:::o;20026:83::-;20067:5;18809:1;20085:16;;20026:83;:::o;29903:116::-;17235:12;:10;:12::i;:::-;17225:22;;:6;;;;;;;;;;:22;;;17217:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18809:1:::1;18920:18;;18914:2;:24;29988:6;:23;29973:12;:38;;;;29903:116:::0;:::o;21242:218::-;21330:4;21347:83;21356:12;:10;:12::i;:::-;21370:7;21379:50;21418:10;21379:11;:25;21391:12;:10;:12::i;:::-;21379:25;;;;;;;;;;;;;;;:34;21405:7;21379:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21347:8;:83::i;:::-;21448:4;21441:11;;21242:218;;;;:::o;22219:377::-;22271:14;22288:12;:10;:12::i;:::-;22271:29;;22320:11;:19;22332:6;22320:19;;;;;;;;;;;;;;;;;;;;;;;;;22319:20;22311:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22400:15;22424:19;22435:7;22424:10;:19::i;:::-;22399:44;;;;;;;22472:28;22492:7;22472;:15;22480:6;22472:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22454:7;:15;22462:6;22454:15;;;;;;;;;;;;;;;:46;;;;22521:20;22533:7;22521;;:11;;:20;;;;:::i;:::-;22511:7;:30;;;;22565:23;22580:7;22565:10;;:14;;:23;;;;:::i;:::-;22552:10;:36;;;;22219:377;;;:::o;21962:88::-;22004:7;22031:11;;22024:18;;21962:88;:::o;22604:436::-;22694:7;22733;;22722;:18;;22714:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22792:17;22787:246;;22827:15;22851:19;22862:7;22851:10;:19::i;:::-;22826:44;;;;;;;22892:7;22885:14;;;;;22787:246;22934:23;22965:19;22976:7;22965:10;:19::i;:::-;22932:52;;;;;;;23006:15;22999:22;;;22604:436;;;;;:::o;32521:92::-;32566:7;32593:12;;32586:19;;32521:92;:::o;19365:34::-;;;;;;;;;;;;;:::o;30027:110::-;17235:12;:10;:12::i;:::-;17225:22;;:6;;;;;;;;;;:22;;;17217:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30123:6:::1;30104:16;;:25;;;;;;;;;;;;;;;;;;30027:110:::0;:::o;22076:135::-;22135:4;17235:12;:10;:12::i;:::-;17225:22;;:6;;;;;;;;;;:22;;;17217:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22165:3:::1;:10;22169:5;22165:10;;;;;;;;;;;;;;;;;;;;;;;;;22164:11;22151:3;:10;22155:5;22151:10;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;22193:3;:10;22197:5;22193:10;;;;;;;;;;;;;;;;;;;;;;;;;22186:17;;22076:135:::0;;;:::o;20220:198::-;20286:7;20310:11;:20;20322:7;20310:20;;;;;;;;;;;;;;;;;;;;;;;;;20306:49;;;20339:7;:16;20347:7;20339:16;;;;;;;;;;;;;;;;20332:23;;;;20306:49;20373:37;20393:7;:16;20401:7;20393:16;;;;;;;;;;;;;;;;20373:19;:37::i;:::-;20366:44;;20220:198;;;;:::o;17655:148::-;17235:12;:10;:12::i;:::-;17225:22;;:6;;;;;;;;;;:22;;;17217:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17762:1:::1;17725:40;;17746:6;::::0;::::1;;;;;;;;17725:40;;;;;;;;;;;;17793:1;17776:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17655:148::o:0;19553:75::-;;;;;;;;;;;;;:::o;17013:79::-;17051:7;17078:6;;;;;;;;;;;17071:13;;17013:79;:::o;19931:87::-;19970:13;20003:7;;;;;;;;;;;;;;;;;19996:14;;19931:87;:::o;21468:269::-;21561:4;21578:129;21587:12;:10;:12::i;:::-;21601:7;21610:96;21649:15;21610:96;;;;;;;;;;;;;;;;;:11;:25;21622:12;:10;:12::i;:::-;21610:25;;;;;;;;;;;;;;;:34;21636:7;21610:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21578:8;:129::i;:::-;21725:4;21718:11;;21468:269;;;;:::o;20426:167::-;20504:4;20521:42;20531:12;:10;:12::i;:::-;20545:9;20556:6;20521:9;:42::i;:::-;20581:4;20574:11;;20426:167;;;;:::o;29788:103::-;17235:12;:10;:12::i;:::-;17225:22;;:6;;;;;;;;;;:22;;;17217:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29877:6:::1;29861:13;:22;;;;29788:103:::0;:::o;29538:116::-;17235:12;:10;:12::i;:::-;17225:22;;:6;;;;;;;;;;:22;;;17217:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18809:1:::1;18920:18;;18914:2;:24;29623:6;:23;29608:12;:38;;;;29538:116:::0;:::o;21745:110::-;21803:4;21827:11;:20;21839:7;21827:20;;;;;;;;;;;;;;;;;;;;;;;;;21820:27;;21745:110;;;:::o;20601:143::-;20682:7;20709:11;:18;20721:5;20709:18;;;;;;;;;;;;;;;:27;20728:7;20709:27;;;;;;;;;;;;;;;;20702:34;;20601:143;;;;:::o;32280:117::-;17235:12;:10;:12::i;:::-;17225:22;;:6;;;;;;;;;;:22;;;17217:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32374:15:::1;32357:14;;:32;;;;;;;;;;;;;;;;;;32280:117:::0;:::o;23309:554::-;17235:12;:10;:12::i;:::-;17225:22;;:6;;;;;;;;;;:22;;;17217:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23401:42:::1;23390:53;;:7;:53;;;;23382:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23512:42;23501:53;;:7;:53;;;;23493:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23613:11;:20;23625:7;23613:20;;;;;;;;;;;;;;;;;;;;;;;;;23612:21;23604:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23698:1;23679:7;:16;23687:7;23679:16;;;;;;;;;;;;;;;;:20;23676:108;;;23735:37;23755:7;:16;23763:7;23755:16;;;;;;;;;;;;;;;;23735:19;:37::i;:::-;23716:7;:16;23724:7;23716:16;;;;;;;;;;;;;;;:56;;;;23676:108;23817:4;23794:11;:20;23806:7;23794:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23832:9;23847:7;23832:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23309:554:::0;:::o;17958:244::-;17235:12;:10;:12::i;:::-;17225:22;;:6;;;;;;;;;;:22;;;17217:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18067:1:::1;18047:22;;:8;:22;;;;18039:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18157:8;18128:38;;18149:6;::::0;::::1;;;;;;;;18128:38;;;;;;;;;;;;18186:8;18177:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17958:244:::0;:::o;23871:478::-;17235:12;:10;:12::i;:::-;17225:22;;:6;;;;;;;;;;:22;;;17217:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23952:11:::1;:20;23964:7;23952:20;;;;;;;;;;;;;;;;;;;;;;;;;23944:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24020:9;24015:327;24039:9;:16;;;;24035:1;:20;24015:327;;;24097:7;24081:23;;:9;24091:1;24081:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;24077:254;;;24140:9;24169:1;24150:9;:16;;;;:20;24140:31;;;;;;;;;;;;;;;;;;;;;;;;;24125:9;24135:1;24125:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24209:1;24190:7;:16;24198:7;24190:16;;;;;;;;;;;;;;;:20;;;;24252:5;24229:11;:20;24241:7;24229:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24276:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24310:5;;24077:254;24057:3;;;;;;;24015:327;;;;23871:478:::0;:::o;1479:106::-;1532:15;1567:10;1560:17;;1479:106;:::o;24357:337::-;24467:1;24450:19;;:5;:19;;;;24442:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24548:1;24529:21;;:7;:21;;;;24521:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24632:6;24602:11;:18;24614:5;24602:18;;;;;;;;;;;;;;;:27;24621:7;24602:27;;;;;;;;;;;;;;;:36;;;;24670:7;24654:32;;24663:5;24654:32;;;24679:6;24654:32;;;;;;;;;;;;;;;;;;24357:337;;;:::o;24702:1943::-;24817:1;24799:20;;:6;:20;;;;24791:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24901:1;24880:23;;:9;:23;;;;24872:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24971:1;24962:6;:10;24954:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25044:7;:5;:7::i;:::-;25034:17;;:6;:17;;;;:41;;;;;25068:7;:5;:7::i;:::-;25055:20;;:9;:20;;;;25034:41;25031:431;;;25109:12;;25099:6;:22;;25091:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25190:3;:11;25194:6;25190:11;;;;;;;;;;;;;;;;;;;;;;;;;25189:12;25181:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25239:3;:14;25243:9;25239:14;;;;;;;;;;;;;;;;;;;;;;;;;25238:15;25230:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25299:16;;;;;;;;;;;25286:29;;:9;:29;;;25282:169;;25378:12;;25368:6;25345:20;25355:9;25345;:20::i;:::-;:29;:45;;25337:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25282:169;25031:431;25496:7;:5;:7::i;:::-;25486:17;;:6;:17;;;25482:103;;25528:14;;;;;;;;;;;25520:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25482:103;25629:13;;25605:21;:37;;;;25653:20;25676:52;25724:3;25676:43;18985:3;25676:25;25687:13;;25676:6;:10;;:25;;;;:::i;:::-;:29;;:43;;;;:::i;:::-;:47;;:52;;;;:::i;:::-;25653:75;;25757:11;:19;25769:6;25757:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;25781:11;:22;25793:9;25781:22;;;;;;;;;;;;;;;;;;;;;;;;;25780:23;25757:46;25753:687;;;25820:66;25842:6;25850:9;25861:24;25872:12;25861:6;:10;;:24;;;;:::i;:::-;25820:21;:66::i;:::-;25753:687;;;25909:11;:19;25921:6;25909:19;;;;;;;;;;;;;;;;;;;;;;;;;25908:20;:46;;;;;25932:11;:22;25944:9;25932:22;;;;;;;;;;;;;;;;;;;;;;;;;25908:46;25904:536;;;25971:64;25991:6;25999:9;26010:24;26021:12;26010:6;:10;;:24;;;;:::i;:::-;25971:19;:64::i;:::-;25904:536;;;26058:11;:19;26070:6;26058:19;;;;;;;;;;;;;;;;;;;;;;;;;26057:20;:47;;;;;26082:11;:22;26094:9;26082:22;;;;;;;;;;;;;;;;;;;;;;;;;26081:23;26057:47;26053:387;;;26121:62;26139:6;26147:9;26158:24;26169:12;26158:6;:10;;:24;;;;:::i;:::-;26121:17;:62::i;:::-;26053:387;;;26205:11;:19;26217:6;26205:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;26228:11;:22;26240:9;26228:22;;;;;;;;;;;;;;;;;;;;;;;;;26205:45;26201:239;;;26267:66;26289:6;26297:9;26308:24;26319:12;26308:6;:10;;:24;;;;:::i;:::-;26267:21;:66::i;:::-;26201:239;;;26366:62;26384:6;26392:9;26403:24;26414:12;26403:6;:10;;:24;;;;:::i;:::-;26366:17;:62::i;:::-;26201:239;26053:387;25904:536;25753:687;26521:1;26505:13;:17;;;;26533:56;26551:6;26559:15;;;;;;;;;;;26576:12;26533:17;:56::i;:::-;26616:21;;26600:13;:37;;;;24702:1943;;;;:::o;6289:192::-;6375:7;6408:1;6403;:6;;6411:12;6395:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6435:9;6451:1;6447;:5;6435:17;;6472:1;6465:8;;;6289:192;;;;;:::o;31443:163::-;31484:7;31505:15;31522;31541:19;:17;:19::i;:::-;31504:56;;;;31578:20;31590:7;31578;:11;;:20;;;;:::i;:::-;31571:27;;;;31443:163;:::o;7687:132::-;7745:7;7772:39;7776:1;7779;7772:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7765:46;;7687:132;;;;:::o;5386:181::-;5444:7;5464:9;5480:1;5476;:5;5464:17;;5505:1;5500;:6;;5492:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5558:1;5551:8;;;5386:181;;;;:::o;30145:470::-;30204:7;30213;30222;30231;30240;30249;30270:23;30295:12;30309:13;30326:41;30338:7;19238:3;19288;30326:11;:41::i;:::-;30269:98;;;;;;30378:19;30401:10;:8;:10::i;:::-;30378:33;;30423:15;30440:23;30465:12;30481:46;30493:7;30502:4;30508:5;30515:11;30481;:46::i;:::-;30422:105;;;;;;30546:7;30555:15;30572:4;30578:15;30595:4;30601:5;30538:69;;;;;;;;;;;;;;;;;;;30145:470;;;;;;;:::o;5850:136::-;5908:7;5935:43;5939:1;5942;5935:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5928:50;;5850:136;;;;:::o;6740:471::-;6798:7;7048:1;7043;:6;7039:47;;;7073:1;7066:8;;;;7039:47;7098:9;7114:1;7110;:5;7098:17;;7143:1;7138;7134;:5;;;;;;:10;7126:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7202:1;7195:8;;;6740:471;;;;;:::o;27896:632::-;27998:19;28021:10;:8;:10::i;:::-;27998:33;;28043:15;28060:23;28085:12;28099:23;28124:12;28138:13;28155:19;28166:7;28155:10;:19::i;:::-;28042:132;;;;;;;;;;;;28185:13;28202:22;28212:11;28202:5;:9;;:22;;;;:::i;:::-;28185:39;;28253:28;28273:7;28253;:15;28261:6;28253:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28235:7;:15;28243:6;28235:15;;;;;;;;;;;;;;;:46;;;;28310:28;28330:7;28310;:15;28318:6;28310:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28292:7;:15;28300:6;28292:15;;;;;;;;;;;;;;;:46;;;;28370:39;28393:15;28370:7;:18;28378:9;28370:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28349:7;:18;28357:9;28349:18;;;;;;;;;;;;;;;:60;;;;28423:37;28435:4;28441:5;28448:4;28454:5;28423:11;:37::i;:::-;28493:9;28476:44;;28485:6;28476:44;;;28504:15;28476:44;;;;;;;;;;;;;;;;;;27896:632;;;;;;;;;;;:::o;27236:652::-;27336:19;27359:10;:8;:10::i;:::-;27336:33;;27381:15;27398:23;27423:12;27437:23;27462:12;27476:13;27493:19;27504:7;27493:10;:19::i;:::-;27380:132;;;;;;;;;;;;27523:13;27540:22;27550:11;27540:5;:9;;:22;;;;:::i;:::-;27523:39;;27591:28;27611:7;27591;:15;27599:6;27591:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27573:7;:15;27581:6;27573:15;;;;;;;;;;;;;;;:46;;;;27651:39;27674:15;27651:7;:18;27659:9;27651:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27630:7;:18;27638:9;27630:18;;;;;;;;;;;;;;;:60;;;;27722:39;27745:15;27722:7;:18;27730:9;27722:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27701:7;:18;27709:9;27701:18;;;;;;;;;;;;;;;:60;;;;27783:37;27795:4;27801:5;27808:4;27814:5;27783:11;:37::i;:::-;27853:9;27836:44;;27845:6;27836:44;;;27864:15;27836:44;;;;;;;;;;;;;;;;;;27236:652;;;;;;;;;;;:::o;26653:575::-;26751:19;26774:10;:8;:10::i;:::-;26751:33;;26796:15;26813:23;26838:12;26852:23;26877:12;26891:13;26908:19;26919:7;26908:10;:19::i;:::-;26795:132;;;;;;;;;;;;26938:13;26955:22;26965:11;26955:5;:9;;:22;;;;:::i;:::-;26938:39;;27006:28;27026:7;27006;:15;27014:6;27006:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26988:7;:15;26996:6;26988:15;;;;;;;;;;;;;;;:46;;;;27066:39;27089:15;27066:7;:18;27074:9;27066:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27045:7;:18;27053:9;27045:18;;;;;;;;;;;;;;;:60;;;;27123:37;27135:4;27141:5;27148:4;27154:5;27123:11;:37::i;:::-;27193:9;27176:44;;27185:6;27176:44;;;27204:15;27176:44;;;;;;;;;;;;;;;;;;26653:575;;;;;;;;;;;:::o;28536:708::-;28638:19;28661:10;:8;:10::i;:::-;28638:33;;28683:15;28700:23;28725:12;28739:23;28764:12;28778:13;28795:19;28806:7;28795:10;:19::i;:::-;28682:132;;;;;;;;;;;;28825:13;28842:22;28852:11;28842:5;:9;;:22;;;;:::i;:::-;28825:39;;28893:28;28913:7;28893;:15;28901:6;28893:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28875:7;:15;28883:6;28875:15;;;;;;;;;;;;;;;:46;;;;28950:28;28970:7;28950;:15;28958:6;28950:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28932:7;:15;28940:6;28932:15;;;;;;;;;;;;;;;:46;;;;29010:39;29033:15;29010:7;:18;29018:9;29010:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28989:7;:18;28997:9;28989:18;;;;;;;;;;;;;;;:60;;;;29081:39;29104:15;29081:7;:18;29089:9;29081:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29060:7;:18;29068:9;29060:18;;;;;;;;;;;;;;;:60;;;;29139:37;29151:4;29157:5;29164:4;29170:5;29139:11;:37::i;:::-;29209:9;29192:44;;29201:6;29192:44;;;29220:15;29192:44;;;;;;;;;;;;;;;;;;28536:708;;;;;;;;;;;:::o;31614:561::-;31664:7;31673;31693:15;31711:7;;31693:25;;31729:15;31747:7;;31729:25;;31776:9;31771:289;31795:9;:16;;;;31791:1;:20;31771:289;;;31861:7;31837;:21;31845:9;31855:1;31845:12;;;;;;;;;;;;;;;;;;;;;;;;;31837:21;;;;;;;;;;;;;;;;:31;:66;;;;31896:7;31872;:21;31880:9;31890:1;31880:12;;;;;;;;;;;;;;;;;;;;;;;;;31872:21;;;;;;;;;;;;;;;;:31;31837:66;31833:97;;;31913:7;;31922;;31905:25;;;;;;;;;31833:97;31955:34;31967:7;:21;31975:9;31985:1;31975:12;;;;;;;;;;;;;;;;;;;;;;;;;31967:21;;;;;;;;;;;;;;;;31955:7;:11;;:34;;;;:::i;:::-;31945:44;;32014:34;32026:7;:21;32034:9;32044:1;32034:12;;;;;;;;;;;;;;;;;;;;;;;;;32026:21;;;;;;;;;;;;;;;;32014:7;:11;;:34;;;;:::i;:::-;32004:44;;31813:3;;;;;;;31771:289;;;;32084:20;32096:7;;32084;;:11;;:20;;;;:::i;:::-;32074:7;:30;32070:61;;;32114:7;;32123;;32106:25;;;;;;;;32070:61;32150:7;32159;32142:25;;;;;;31614:561;;;:::o;8315:278::-;8401:7;8433:1;8429;:5;8436:12;8421:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8460:9;8476:1;8472;:5;;;;;;8460:17;;8584:1;8577:8;;;8315:278;;;;;:::o;30623:395::-;30716:7;30725;30734;30754:12;30769:50;30815:3;30770:39;18985:3;30771:19;30783:6;30771:7;:11;;:19;;;;:::i;:::-;30770:25;;:39;;;;:::i;:::-;30769:45;;:50;;;;:::i;:::-;30754:65;;30830:13;30846:51;30893:3;30847:40;18985:3;30848:20;30860:7;30848;:11;;:20;;;;:::i;:::-;30847:26;;:40;;;;:::i;:::-;30846:46;;:51;;;;:::i;:::-;30830:67;;30908:23;30934:28;30956:5;30934:17;30946:4;30934:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;30908:54;;30981:15;30998:4;31004:5;30973:37;;;;;;;;;30623:395;;;;;;;:::o;31026:409::-;31136:7;31145;31154;31174:15;31192:24;31204:11;31192:7;:11;;:24;;;;:::i;:::-;31174:42;;31227:12;31242:21;31251:11;31242:4;:8;;:21;;;;:::i;:::-;31227:36;;31274:13;31290:22;31300:11;31290:5;:9;;:22;;;;:::i;:::-;31274:38;;31323:23;31349:28;31371:5;31349:17;31361:4;31349:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;31323:54;;31396:7;31405:15;31422:4;31388:39;;;;;;;;;;31026:409;;;;;;;;:::o;29252:274::-;29360:28;29382:5;29360:17;29372:4;29360:7;;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;29350:7;:38;;;;29412:20;29427:4;29412:10;;:14;;:20;;;;:::i;:::-;29399:10;:33;;;;29457:22;29473:5;29457:11;;:15;;:22;;;;:::i;:::-;29443:11;:36;;;;29500:18;29512:5;29500:7;;:11;;:18;;;;:::i;:::-;29490:7;:28;;;;29252:274;;;;:::o

Swarm Source

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