function recoupStake(address _userUportAddress, uint _expiryDate, bytes _signature) public whenNotPaused {
        bytes32 hashMessage = keccak256(abi.encodePacked(_userUportAddress, _expiryDate));
        address signer = hashMessage.toEthSignedMessageHash().recover(_signature);

        require(signer == grantSigner, "Signature is not valid");
        require(block.timestamp < _expiryDate, "Grant is expired");
        require(userStakedAddress[_userUportAddress] != 0, "User has not staked!");

        address stakedBy = userStakedAddress[_userUportAddress];
        uint256 amount = stakedAmount[_userUportAddress];
        userStakedAddress[_userUportAddress] = address(0x0);
        stakedAmount[_userUportAddress] = 0;

        stakedBy.transfer(amount);

        emit UserRecoupStake(_userUportAddress, stakedBy, amount);
    }