@Override
	public ITraceEvent createEvent(String rawEventText, int sourceLineNumber) throws IntraceException {
		
		if (rawEventText==null){
			return null;
		}
		String parts[] = rawEventText.split("~");
		rawEventText = parts[0];
		StackTraceElement[] stackTrace = null;
		if (parts.length==2) {
			stackTrace = parseStackTrace(parts[1]);
		}

		int indexOfLastColon = rawEventText.lastIndexOf(TOKEN_COLON);
		if (indexOfLastColon==-1) {
			throw new RuntimeException("1000 Major exception.  To separate parts of a date, there should be multiple colons in this event text, but found zero [" + rawEventText + "]");
		}
		sourceLineNumber = -1; //Input sourceLineNumber is ignored.  -1 is default used if trace event doesn't have line number, which probably means agent wasn't configured to provide it.
		
		//If the character to the left of the last colon is a curly, 
		//then the text to the right of the last colon is the source line number.
		char isCurlyBrace = rawEventText.charAt(indexOfLastColon-1);
		if (isCurlyBrace==ENTRY_MARKER || isCurlyBrace==EXIT_MARKER) {
			sourceLineNumber = Integer.parseInt(rawEventText.substring(indexOfLastColon+1));	
		} else { // then there is no line number at the end of the line, so see if there is a curly at the end of the line.
			isCurlyBrace = rawEventText.charAt(rawEventText.length()-1);
		}
		
		ITraceEvent event = null;
		if (isCurlyBrace==ENTRY_MARKER) {
			event = m_entryExitParser.createEvent(rawEventText, sourceLineNumber);
			event.setEventType(EventType.ENTRY );
		} else if (isCurlyBrace==EXIT_MARKER) {
			event = m_entryExitParser.createEvent(rawEventText, sourceLineNumber);
			event.setEventType(EventType.EXIT );
		} else {
			event = m_otherParser.createEvent(rawEventText, sourceLineNumber);
		}
		
		event.setStackTrace(stackTrace);
		return event;
	}