```\nfunction _withdrawDividendOfUser(address payable user) internal override returns (uint256)\n{\n    uint256 _withdrawableDividend = withdrawableDividendOf(user);\n    if (_withdrawableDividend > 0) {\n        withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);\n\n        address tokenAddress = defaultToken;\n        bool success;\n\n        if (tokenAddress == address(0)) {\n            (success, ) = user.call{value: _withdrawableDividend, gas: 3000}("");\n        } \n        else {\n            address[] memory path = new address[](2);\n            path[0] = uniswapV2Router.WETH();\n            path[1] = tokenAddress;\n            try\n                uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{\n                value: _withdrawableDividend}(0, path, user, block.timestamp)\n            {\n                success = true;\n            } catch {\n                success = false;\n            }\n        }\n\n        if (!success) {\n            withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);\n            return 0;\n        } \n        else {\n            emit DividendWithdrawn(user, _withdrawableDividend);\n        }\n        return _withdrawableDividend;\n    }\n    return 0;\n}\n```\n