function calculateClaimableAmount(address claimer, uint256 disbursalAmount, address token, ITokenSnapshots proRataToken, uint256 snapshotId)
        private
        constant
        returns (uint256)
    {
        uint256 proRataClaimerBalance = proRataToken.balanceOfAt(claimer, snapshotId);
        
        if (proRataClaimerBalance == 0) {
            return 0;
        }
        
        uint256 proRataTokenTotalSupply = proRataToken.totalSupplyAt(snapshotId);
        
        if (token == address(proRataToken)) {
            proRataTokenTotalSupply -= proRataToken.balanceOfAt(address(this), snapshotId);
        }
        
        
        
        
        
        return mul(disbursalAmount, proRataClaimerBalance) / proRataTokenTotalSupply;
    }