contract HooToken is ERC20, ERC20Detailed, ERC20Pausable {
    
    // metadata
    string public constant tokenName = "HooToken";
    string public constant tokenSymbol = "HOO";
    uint8 public constant decimalUnits = 8;
    uint256 public constant initialSupply = 1000000000;
    
    constructor() ERC20Pausable()  ERC20Detailed(tokenName, tokenSymbol, decimalUnits) ERC20() public {
        require(initialSupply > 0);
        _mint(msg.sender, initialSupply * (10 ** uint256(decimals())));
    }
    
    function mint(uint256 value) public whenNotPaused {
        _mint(msg.sender, value * (10 ** uint256(decimals())));
    }
    
    /**
     * @dev Burns a specific amount of tokens.
     * @param value The amount of token to be burned.
     */
    function burn(uint256 value) public whenNotPaused {
        require(!isLock(msg.sender));
        _burn(msg.sender, value);
    }
    
    /**
     * @dev Freeze a specific amount of tokens.
     * @param value The amount of token to be Freeze.
     */
    function freeze(uint256 value) public whenNotPaused {
        require(!isLock(msg.sender));
        _freeze(value);
    }
    
        /**
     * @dev unFreeze a specific amount of tokens.
     * @param value The amount of token to be unFreeze.
     */
    function unfreeze(uint256 value) public whenNotPaused {
        require(!isLock(msg.sender));
        _unfreeze(value);
    }
    
}
function unfreeze(uint256 value) public whenNotPaused {
    require(!isLock(msg.sender));
    _unfreeze(value);
}

/**
 * @dev unFreeze a specific amount of tokens.
 * @param value The amount of token to be unFreeze.
 */