!"".equals( line = line.trim() ) &&
	private String parseTraces(String line, Map stackTracesByID) throws ParseException, IOException	{		HashMap map = new HashMap();		HashMap lineCache = new HashMap();		int lineCount = 0;		ArrayList stack = new ArrayList();		do		{			// These are the non-useful characters in the file. They look fun in this order.			StringTokenizer tok = new StringTokenizer(line, "( =:)");			assertEqual(nextToken(tok, true), "TRACE");			Integer id = Integer.valueOf(nextToken(tok, true));			stack.clear();			while ( ( line = nextLine(false) ) != null &&					!line.startsWith("TRACE") &&					!line.startsWith("CPU SAMPLES BEGIN") )			{				line = line.trim();				// Strip out line number, "Native method", "Unknown line"				int colon = line.lastIndexOf(':');				// String lineNumber = "<Unknown line>";				if ( colon != -1 )				{					int paren = line.lastIndexOf(')');					int size = colon + line.length() - paren;					// lineNumber = line.substring(colon + 1, paren);					StringBuffer sb = new StringBuffer(size);					sb.append(line.substring(0, colon));					sb.append(line.substring(paren, line.length()));					line = sb.toString();					String existing = (String)lineCache.get(line);					if ( existing != null )						line = existing;					else						lineCache.put(line, line);					++lineCount;				}				stack.add(line);			}			String[] stackArray = (String[])stack.toArray(new String[stack.size()]);			StackTrace st = new StackTrace(stackArray);			// System.out.println(st);			stackTracesByID.put(id, st);			if ( stack.size() > maxStackSize )				maxStackSize = stack.size();		}		while ( line != null && !line.startsWith("CPU SAMPLES BEGIN") );		// System.out.println("Found " + lineCache.size() + " unique lines among " + lineCount + " lines");		return line;	}