function unfreezeAwardedTokens(address _owner) public {
        if (frozenAwardedTokens[_owner] > 0) {
            uint elapsed = 0;
            uint waitTime = awardedInitialWaitSeconds;
            if (lastUnfrozenAwardedTimestamps[_owner]<=0) {
                elapsed = block.timestamp - awardedTimestamps[_owner];
            } else {
                elapsed = block.timestamp - lastUnfrozenAwardedTimestamps[_owner];
                waitTime = awardedUnfreezePeriodSeconds;
            }
            if (elapsed > waitTime) {
                uint256 tokensToUnfreeze = awardedTokens[_owner] * percentUnfrozenAfterAwardedPerPeriod / 100;
                if (tokensToUnfreeze > frozenAwardedTokens[_owner]) {
                    tokensToUnfreeze = frozenAwardedTokens[_owner];
                }
                balances[_owner] += tokensToUnfreeze;
                frozenAwardedTokens[_owner] -= tokensToUnfreeze;
                lastUnfrozenAwardedTimestamps[_owner] = block.timestamp;
            }
        } 
    }