<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def format_ltime(endianess, tm_format, data):
 	""" 	Return data formatted into a human readable time stamp. 	:param str endianess: The endianess to use when packing values ('>' or '<') 	:param int tm_format: The format that the data is packed in, this typically 	 corresponds with the value in the GEN_CONFIG_TBL (table #0) (1 <= tm_format <= 4) 	:param bytes data: The packed and machine-formatted data to parse 	:rtype: str 	"""

	if tm_format == 0:
		return ''
	elif tm_format == 1 or tm_format == 2:  # I can't find solid documentation on the BCD data-type
		y = data[0]
		year = '????'
		if 90 <= y <= 99:
			year = '19' + str(y)
		elif 0 <= y <= 9:
			year = '200' + str(y)
		elif 10 <= y <= 89:
			year = '20' + str(y)
		month = data[1]
		day = data[2]
		hour = data[3]
		minute = data[4]
		second = data[5]
	elif tm_format == 3 or tm_format == 4:
		if tm_format == 3:
			u_time = float(struct.unpack(endianess + 'I', data[0:4])[0])
			second = float(data[4])
			final_time = time.gmtime((u_time * 60) + second)
		elif tm_format == 4:
			final_time = time.gmtime(float(struct.unpack(endianess + 'I', data[0:4])[0]))
		year = str(final_time.tm_year)
		month = str(final_time.tm_mon)
		day = str(final_time.tm_mday)
		hour = str(final_time.tm_hour)
		minute = str(final_time.tm_min)
		second = str(final_time.tm_sec)

	return "{0} {1} {2} {3}:{4}:{5}".format((MONTHS.get(month) or 'UNKNOWN'), day, year, hour, minute, second)